我有一个名为 Permissions 的枚举。可以为用户分配权限,或者可以将权限分配给角色并为用户指定角色。
用户和角色都有这样的属性:
public virtual IList<Permission> Permissions { get; set; }
我想使用枚举作为权限,所以在我的代码中我可以做类似的事情
public static bool UserHasPermission(Permission.DeleteUser)
现在我的枚举中有大约 50 个不同的权限。如果我不必在数据库中填充镜像数据集,那就太好了。我的枚举看起来像这样:
public enum Permission
{
//site permissions 1-99
[StringValue("View Users")]
ViewUser = 1,
[StringValue("Add User")]
AddUser = 2,
[StringValue("Edit User")]
EditUser = 3,
[StringValue("Delete User")]
DeleteUser = 4
...
}
目前,我有一个权限表,即 PermissionId (int) 和 PermissionName (varchar (50))。
这是我在角色方面的表格。就权限而言,用户端完全相同:
CREATE TABLE dbo.Roles
(
RoleId int IDENTITY(2,1) NOT NULL,
RoleName varchar (50) NOT NULL,
CONSTRAINT PK_Roles PRIMARY KEY CLUSTERED (RoleId)
)
CREATE TABLE dbo.RolePermissions
(
RolePermissionId int IDENTITY(1,1) NOT NULL,
RoleId int NOT NULL,
PermissionId int NOT NULL,
CONSTRAINT PK_RolePermissions PRIMARY KEY CLUSTERED (RolePermissionId),
CONSTRAINT FK_RolePermissions_Roles FOREIGN KEY (RoleId) REFERENCES Roles(RoleId),
CONSTRAINT U_RolePermissions UNIQUE(RoleId, PermissionId)
)
然后,我有一个权限表以备需要,但我只是不知道如何将权限表的角色权限中的 id 字段映射回枚举。
CREATE TABLE dbo.Permissions
(
PermissionId int NOT NULL,
PermissionName varchar (50) NOT NULL,
CONSTRAINT PK_Permissions PRIMARY KEY CLUSTERED (PermissionId)
)
- 我可以将枚举映射到表吗?
- 我应该映射它,还是应该取出 Permissions 表并在 UserPermissions 和 RolePermissions 中保留 PermissionId 只是一个 int 并将其映射到枚举?
- 如果我保留 Permissions 表,nhibernate 有没有办法从枚举中的数据自动填充 Permissions 表中的数据?
现在,我没有映射到权限枚举,除了这样的东西:
HasManyToMany(x => x.Permissions)
.WithParentKeyColumn("RoleId")
.WithChildKeyColumn("PermissionId")
.WithTableName("RolePermissions")
.LazyLoad()
.Cascade.All();
不幸的是,这会导致错误:
表中的关联
RolePermissions 指的是未映射的
班级:
GotRoleplay.Core.Domain.Model.Permission
我对枚举做错了什么?当枚举是对象上的值列表而不仅仅是单个值时,是否有标准方法或最佳实践将它们与 fluencenhibernate 一起使用?