首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于当前用户角色(MVC4)返回数据子集

基于当前用户角色(MVC4)返回数据子集
EN

Stack Overflow用户
提问于 2014-02-16 09:20:31
回答 1查看 456关注 0票数 1

我有一个部门的表格,它有如下数据。

  • 管理员
  • 支持
  • 客户关怀
  • 等等。

该表的设计如下

代码语言:javascript
运行
复制
[ ID | User Name | Department | IsActive | ...]

当我查询这个表时,我想从数据库返回的内容取决于当前登录的用户部门。

  • 管理员可以查看所有
  • 支持不能查看管理,但可以查看其他所有内容
  • 客户服务不能查看支持或管理,但下面的所有内容。

如果这个数据库设计不够,那么请给我一个好的设计建议。

到目前为止,我实施的是

代码语言:javascript
运行
复制
var accountRepository = DataRepositoryFactory.GetDataRepository<IAccountRepository>();

  var accounts = accountRepository.Get() as List<UserManagement>;

  if (accounts != null)
   {
      if (AuthorizationAccount.Department == (SecurityConstants.RoleSuperAdministrator))
            return accounts.ToArray();
      else if (AuthorizationAccount.Department == (SecurityConstants.RoleAdministrator))
            return accounts.Where(r => !r.Department.Equals(SecurityConstants.RoleSuperAdministrator)).ToArray();
      else if (AuthorizationAccount.Department != (SecurityConstants.RoleAdministrator)
            || AuthorizationAccount.Department != (SecurityConstants.RoleSuperAdministrator))
            return accounts.Where(r => !r.Department.Equals(SecurityConstants.RoleSuperAdministrator))
                .Where(r => !r.Department.Equals(SecurityConstants.RoleAdministrator)).ToArray();
                }

  return null;

我不喜欢有这么多的IF条件,如果需求改变了,或者规则变得更加复杂,这将是维护的噩梦。

用较少的硬编码更好地实现这种行为的好的设计建议是什么?

是否有任何设计模式来回答这种类型的问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-16 12:26:01

你有两个选择:

  1. 规格模式规范模式在互联网上有很好的描述。这里是一个很好的描述。我赞成规格说明,但这并不总是方便的。
  2. 过滤掉DbContext级别的数据(假定使用实体框架)。头在这里的代码,并解释如何实现这一点。这适用于低级别的全局过滤,因此您甚至不必在存储库中考虑它。但这增加了您的db代码和UI代码之间不必要的耦合。还增加了复杂性并增加了调试问题。如果除了MVC项目之外,您的DbContext不在其他任何地方使用,请使用此方法。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21809378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档