我有一个Departments表,它的数据如下。
该表的设计如下
[ 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条件,如果需求发生变化或者规则变得更加复杂,那就是维护噩梦。
使用较少的硬编码可以更好地实现此行为的优秀设计建议是什么?
是否有任何设计模式可以解决此类问题?