例如:
public class Role
{
public Role()
{
Permissions = new HashSet<Permission>();
}
public string ID { get; set; }
public string Name { get; set; }
public virtual ICollection<Permission> Permissions { get; set; }
}
public enum Permission
{
UserManagement = 0,
DepartmentManagement = 1,
RoleManagement = 2,
ModifyPassword = 3
}
通常,在一个模型和另一个模型之间,我可以编写两个导航属性。但是对于这种情况,我无法在枚举中编写导航属性。
你能做这样的事情吗?
[Flags]
public enum Permission
{
UserManagement = 1,
DepartmentManagement = 2,
RoleManagement = 4,
ModifyPassword = 8
}
public class Role
{
public string ID { get; set; }
public string Name { get; set; }
public Permission Permissions { get; set; }
}
然后,例如:
var role = new Role();
//assign multiple values
role.Permissions = Permission.UserManagement | Permission.ModifyPassword;
//add a value
role.Permissions |= Permission.DepartmentManagement;
//remove a value
role.Permissions &= ~Permission.DepartmentManagement;
//test for a value
bool hasPermission = (role.Permissions & Permission.ModifyPassword) != 0;
警告:
可能考虑公开一些方法,例如RemovePermission(...)
,AddPermission(...)
等等,如果有人按位操作不当,将很难引入一个非常重要的错误。
除非有性能方面的要求,否则我可能只是将权限设置为一个类并承担额外的开销。
一些阅读:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句