我有一张部门表,数据如下。
该表设计如下
[ 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条件,如果需求改变或规则变得更复杂,这是一场维护噩梦。
有什么好的设计建议可以用更少的硬编码更好地实现这种行为?
是否有任何设计模式可以解决这类问题?