【发布时间】:2018-02-13 16:13:49
【问题描述】:
我有一个使用 ASP.NET 身份的用户和角色的沼泽标准实现:
public class User : IdentityUserBase { }
public class Role : IdentityRoleBase { }
public class UserRole : IdentityUserRoleBase { }
我需要 User 类中的属性或方法返回用户的(第一个)角色(在我的应用中,每个用户只能有一个):
public class User : IdentityUserBase
{
// ...
public Role GetRole()
{
return this.Roles.FirstOrDefault(); // this actually returns a UserRole object, with only a UserId and a RoleId available (no Role object)
}
}
有没有办法在 DAL 中做到这一点?
我知道在 UI 层可以使用 RoleManager、DbContext 或 HTTPContext 等全局对象,但我无法访问 User 类中的对象(并且不想将它们作为参数传递)。
我原以为这一定是一个标准用例,但我找不到答案……我的问题与this one 基本相同,但我需要访问用户对象本身中的角色信息.
【问题讨论】:
-
这个问题听起来更像是一个糟糕的设计决策。用户类不应该知道如何获取数据,它应该在实例化时由任何创建它的工厂填充。你应该反转控制.. IE
RoleManager.PopulateRoleFor(user);更有意义。 -
类不需要知道如何获取数据;它只需要得到它。我需要一个快速的小方法或属性来告诉我用户的角色是什么——又好又简单。你的设计,虽然无疑更现代,但对我来说意义不大......
-
@EdGraham 这是针对任何用户还是针对正在执行当前请求的用户?
-
@trailmax 这适用于任何用户。我想遍历用户并确定每个用户的(第一个)角色。而且我想我刚刚找到了答案……
标签: c# entity-framework asp.net-identity