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);
据我所知,我无法直接修改这个集合,这是完全可以接受的。任何人都可以帮我解决这个问题吗?