다음은 기본적인 상황입니다. 우리의 응용 프로그램에는 역할과 권한이 있습니다. 역할과 권한 사이에는 다 대다 관계가 있습니다. 사용자에게 역할을 직접 할당 할 수 있거나 서비스 비용을 지불함으로써 얻은 역할을 사용자가 가질 수 있다는 점이 장점입니다. 더 재미있는 일을하려면 사용자가 유료 서비스를 취소하거나 만료되면 더 이상 그 역할을 가져서는 안됩니다. 내 문제는 해당 사용자에 대해 유효 사용 권한 (읽기 전용) 컬렉션을 갖고 싶습니다. 해당 사용자에 대해 쿼리 할 수 있기를 바랍니다. 일부 매핑 세부 정보 :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();
//...
}
내가 필요 무엇이이 같은 (위 UserMap 할 수있는 별도)
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);
본인은이 컬렉션을 직접 수정할 수 없다는 것을 알고 있으며 이는 충분히 받아 들일 수 있습니다. 누구나이 매핑을 도와 줄 수 있습니까?