我正在一个项目中工作,我们在CrossCutting中有一个名为IUserContext
的界面,用于装饰我们域中的用户实体。
此IUserContext
表示当前登录的用户。
首先: IUserContext
是否属于CrossCutting?
User实体看起来像这样:
public sealed class User : Entity, IUserContext
{
public ICollection<Permission> Permissions { get; set; }
}
这样做是因为他们想在任何需要的地方注入IUserContext
。
确定!
现在我有创建权限服务的任务。在此服务中,我还需要注入IUserContext
,因此我可以检查当前登录用户的权限。我的想法:
private readonly IUserContext _userContext;
public PermissionService(IUserContext userContext)
{
_userContext = userContext;
}
public bool HasPermission(string permission)
{
return _userContext.Permissions.Any(x => x.Name == permission);
}
问题:用户实体有ICollection<Permission>
,其中权限是一个实体本身,我无法为IUserContext
ICollection<Permission>
属性创建因为IUserContext
CrossCutting不了解包含实体权限的域,这是正确的。
从CrossCutting中删除a
并将其放入域中的正确方法是什么?如果是这样,我还需要在域不可见的其他层(例如UI层)中将当前用户登录?