考虑以下简化场景:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
// restricted
public string SocialSecurityNumber { get; set; }
// restricted
public string MothersMaidenName { get; set; }
}
因此,在应用程序中,许多用户可以查看Person
数据。部分用户可以查看全部;其他用户只能查看Name
和Age
。
在客户端让 UI 仅显示授权数据很容易,但我真的不想将该数据发送到客户端。
我试图通过创建FullPerson : BasicPerson
层次结构(每类层次结构表)来实现这一点。我使用了 a 的两个实现StaffRepository
来获得所需的类型,但是由于 NH 代理,必要的转换在运行时失败。当然,在 RDBMS 中,People
表中的任何给定行都可以表示 aFullPerson
或 a BasicPerson
,并且给它们两个相同的鉴别器值也不起作用。
我只考虑映射FullPerson
并使用AliasToBean
结果转换器过滤到BasicPerson
,但我理解这是一条单向街道,而我希望在会议。
我的另一个想法是将所有受限字段包装到一个类中并将其添加为属性。我对这种方法的担忧有几个:
- 它损害了我的域模型,
- 我必须将该属性声明为一个集合(始终为 1)才能使其延迟加载,并且
- 我什至不确定如何防止加载该惰性集合。
这一切都感觉不对劲。是否有已知的方法来达到预期的结果?
澄清:
这在仅限 Intranet 的桌面应用程序中;会话存在于客户端上。虽然我当然可以创建一个中间服务层,但我必须放弃延迟加载和更改跟踪,我真的很想保留这些。