Permissionsという列挙型があります。ユーザーには権限を割り当てることができます。または、権限をロールに割り当てることができ、ユーザーに役割を割り当てることができます。私は今、私はおよそ持っている私のコードで私はFluentNibernateとEnums
public static bool UserHasPermission(Permission.DeleteUser)
のようなものを行うことができますので、アクセス権のために列挙型を使用したい
public virtual IList<Permission> Permissions { get; set; }
:
ユーザーおよびロールは、両方のこのような性質を持っています私のenumで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)
)
、私は私がそれを必要とする場合でTBLE権限を持っていますが、私はちょうどRolePermissionsでidフィールドのいずれかをマッピングする方法を得ることはありませんかPermissionsテーブルをenumに戻します。
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のままにして、enumにマップしますか?
- Permissionsテーブルを保持している場合、nhibernateがEnumのデータからPermissionsテーブルのデータを自動収集する方法はありますか?
は今のところ、私はこのようなもの以外の許可の列挙型へのマッピングを、持っていない:
An association from the table RolePermissions refers to an unmapped class: GotRoleplay.Core.Domain.Model.Permission
私が間違っているのは何:
HasManyToMany(x => x.Permissions)
.WithParentKeyColumn("RoleId")
.WithChildKeyColumn("PermissionId")
.WithTableName("RolePermissions")
.LazyLoad()
.Cascade.All();
は残念ながら、これはエラーが発生します列挙型で?列挙型が単一の値だけでなくオブジェクトの値のリストであるときに、fluentnhibernateでそれらを使用するための標準的な方法またはベストプラクティスがありますか?
よりよい解決策をお手伝いすることはできませんが、私はあなたが答えを見つけられたことをうれしく思っています。 – CalebHC