不同用户角色的不同 DbContext
Different DbContexts for different user roles
所以。 Сan 你向我解释是否正确的方法是为不同类型的用户使用不同的 DBContext。
例如:
我们的 ApiController 有两种方法:
[HttpGet, Route("admin"), Authorize(RoleType.Admin)]
public Task<...> Get(... adminRequest)
{
var query = mapper<AdminGetCommand>(adminRequest);
return mediatr.Send(query);
}
[HttpGet, Route(""), Authorize(RoleType.User)]
public Task<...> Get(... userRequest)
{
var query = mapper<UserGetCommand>(userRequest);
return mediatr.Send(query);
}
之后每个命令依赖于不同的 Service/DbContext 有不同的配置。
例如:
//filter for users
...
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.ApplyGlobalFilters<IDeletedUtcDateTime>(e => !e.DeletedUtcDateTime.HasValue);
}
...
//filter for admin
...
protected override void OnModelCreating(ModelBuilder builder)
{
...
base.OnModelCreating(builder);
...
}
...
我觉得我遗漏了什么或这里有更好的解决方案
Сan you explain to me whether the correct approach would be to have different DBContext for different types of users.
如果您想要为用户提供一组不同的全局查询过滤器(或其他映射或行为更改),这是一种合理的方法。您可以简单地从 AdminDbContext 派生 UserDbContext 或从基础 DbContext 派生两者,然后在 DI 中分别注册它们。
所以。 Сan 你向我解释是否正确的方法是为不同类型的用户使用不同的 DBContext。
例如: 我们的 ApiController 有两种方法:
[HttpGet, Route("admin"), Authorize(RoleType.Admin)]
public Task<...> Get(... adminRequest)
{
var query = mapper<AdminGetCommand>(adminRequest);
return mediatr.Send(query);
}
[HttpGet, Route(""), Authorize(RoleType.User)]
public Task<...> Get(... userRequest)
{
var query = mapper<UserGetCommand>(userRequest);
return mediatr.Send(query);
}
之后每个命令依赖于不同的 Service/DbContext 有不同的配置。 例如:
//filter for users
...
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.ApplyGlobalFilters<IDeletedUtcDateTime>(e => !e.DeletedUtcDateTime.HasValue);
}
...
//filter for admin
...
protected override void OnModelCreating(ModelBuilder builder)
{
...
base.OnModelCreating(builder);
...
}
...
我觉得我遗漏了什么或这里有更好的解决方案
Сan you explain to me whether the correct approach would be to have different DBContext for different types of users.
如果您想要为用户提供一组不同的全局查询过滤器(或其他映射或行为更改),这是一种合理的方法。您可以简单地从 AdminDbContext 派生 UserDbContext 或从基础 DbContext 派生两者,然后在 DI 中分别注册它们。