【发布时间】:2014-11-11 13:27:00
【问题描述】:
我有一个使用 Windows 身份验证的应用程序。无需太详细,我的应用程序设置了一系列用户,然后授予管理员权限以创建缺勤。如果他们没有管理员权限,则他们无法更改用户或创建缺勤。
我想根据我的数据库中的管理员标志是否设置为 true 来限制对某些控制器/操作的访问。我工作的用户属于多个组,没有可以包含在授权属性角色字符串中的管理员组。
我按照教程 here 进行操作,但由于我有一个数据库优先实体框架模型,实体类继承自 DbContext 而不是身份上下文。
当我运行该应用程序时,我的代码引发了一条错误消息:“mscorlib.dll 中发生了‘System.InvalidOperationException’类型的异常,但未在用户代码中处理
附加信息:实体类型 IdentityRole 不是当前上下文模型的一部分。”我点击查看详细信息,我看到这个“实体类型 IdentityRole 不是当前上下文模型的一部分。”
这是发生错误的代码片段:
AbsencesEntities context = new AbsencesEntities();
AbsenceRepository absenceRepository = new AbsenceRepository(context);
IdentityResult IdRoleResult;
IdentityResult IdUserResult;
// Create a RoleStore object by using the UserSecurity object.
// The RoleStore is only allowed to contain IdentityRole objects.
var roleStore = new RoleStore<IdentityRole>(context);
// Create a RoleManager object that is only allowed to contain IdentityRole objects
// When creating the RoleManager object, you pass in (as a parameter) a new RoleStore
var roleMgr = new RoleManager<IdentityRole>(roleStore);
// Then, you create the "canEdit" role if it doesn't already exist
if(!roleMgr.RoleExists("canEdit"))
{
IdRoleResult = roleMgr.Create(new IdentityRole { Name = "canEdit" });
}
澄清一下,我没有在配置文件中指定任何其他上下文。
我必须有一种方法可以使用 Windows 身份验证并使用返回的 LAN ID 来检查它是否存在于数据库中。然后使用它来检查数据库中的 Admin 标志是否为真。
【问题讨论】:
标签: c# asp.net asp.net-mvc entity-framework asp.net-mvc-5