【发布时间】:2014-03-15 14:03:56
【问题描述】:
我有一个部门表,它的数据如下。
- 管理员
- 支持
- 客户服务
- 等等……
表格设计如下
[ ID | User Name | Department | IsActive | ...]
当我查询这个表时,我想从数据库中返回什么取决于当前登录用户的部门。
- 管理员可以查看全部
- 支持人员无法查看管理员,但可以查看其他所有内容
- 客户服务无法查看支持或管理,但以下所有内容。
如果这个数据库设计还不够,请给我推荐一个好的设计。
到目前为止我已经实现的是
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 条件,如果需求发生变化或规则变得更复杂,这将是一场维护噩梦。
有什么好的设计建议可以用更少的硬编码更好地实现这种行为?
是否有任何设计模式可以回答此类问题?
【问题讨论】:
标签: asp.net-mvc design-patterns user-roles