0
這裏是基本情況。在我們的應用程序中,我們擁有角色和權限。角色和權限之間存在多對多的關係。值得注意的是,用戶可以直接分配角色,或者他們可以通過支付服務獲得角色。爲了讓事情更有趣,如果用戶取消付費服務,或者過期,那麼他們就不應該再扮演這個角色。我的問題是,我希望在任何給定的用戶上擁有(只讀)有效權限的集合,並且我希望能夠對其進行查詢。有些映射的詳細信息:只讀加入收藏NHibernate
public ApplicationPermissionMap()
{
Table("CLSYS_ApplicationPermissions");
Id(ap => ap.ID)
.Column("ApplicationPermissionID")
.GeneratedBy.Assigned();
//...
}
public ApplicationRoleMap()
{
Table("CLSYS_ApplicationRole");
Id(role => role.ID)
.Column("ApplicationRoleID");
HasManyToMany(r => r.Permissions)
.Table("CLSYS_ApplicationRolePermissions")
.ParentKeyColumn("ApplicationRoleID")
.ChildKeyColumn("PermissionID")
.Cascade.None();
//...
}
public PaidServiceMap()
{
Table("ECOM_PaidService");
Id(ps => ps.ID)
.Column("PaidServiceID");
Component(ps => ps.Status, statusMapping =>
{
statusMapping.Map(status => status.ID)
.Column("StatusID")
.Not.Nullable();
});
HasManyToMany(ps => ps.ApplicationRoles)
.Table("ECOM_PaidServiceRoles")
.ParentKeyColumn("PaidServiceID")
.ChildKeyColumn("RoleID")
.Cascade.None();
//....
}
public UserMap()
{
Table("CLSYS_User");
Id(user => user.ID)
.Column("UserID");
HasManyToMany(user => user.Roles)
.Table("CLSYS_User_ApplicationRoles")
.ParentKeyColumn("UserID")
.ChildKeyColumn("RoleID")
.Cascade.None();
//...
}
我需要什麼是這樣的(一個除了以上用戶映射)
public UserMap()
{
//...
HasMany(user => user.EffectivePermissions)
//Union (user -> ApplicationRoles -> permissions)
//Union (user -> PaidServices [with active status] -> permissions)
//Distinct
}
而且我希望能夠在這些權限查詢,像這樣
_session.Linq<User>().Where(u => u.EffectivePermssions.Contains(somePermission) && user.SomeOtherCriteria == something);
據我所知,我無法直接修改這個集合,這是完全可以接受的。任何人都可以幫我解決這個問題嗎?