我觉得我缺少什么。 Authorize
本身有效,但使用角色无效。 cshtml代码包含razor
的内容,我不确定是否可以将它们与基于角色的授权结合使用。此外,IsInRole
始终返回false。
在我的数据库AspNetUserRoles
中,角色实例在那里具有正确的RoleId和UserId。我将用户添加到数据库的Seed
方法中的角色中。
if (!userManager.IsInRole(adminUser.Id, "SystemAdministrator"))
userManager.AddToRole(adminUser.Id, "SystemAdministrator");
我是否需要将它们添加到其他位置,例如在某种角色管理器中?
我认为这是“启动中配置”的相关部分:
app.CreatePerOwinContext<RoleManager<AppRole>>((options, context) =>
new RoleManager<AppRole>(
new RoleStore<AppRole>(context.Get<MyANTon.DataContext.AntContext>())));
也许在此之后,我必须将用户添加到角色中?
编辑:我发现了可能的错误来源。我的db context
似乎没有包括AspNetUserRoles
甚至AspNetUsers
之类的身份表。我上周从表单身份验证迁移到了身份,这现在可能是问题。我是否需要相应地更改上下文?它继承自IdentityDbContext<AppUser>
,这就是为什么我不能只添加AspUser
东西(因为它已经存在)的原因,但是当我在运行时查看上下文时,它就不存在了。>
下一个编辑:我缺少角色经理的web.config
。添加之后,看来我的data context
想法实际上是对的。现在,抛出的错误是:'The entity type AppUser is not part of the model for the current context.'
。我的上下文继承自IdentityDbContext<AppUser>
,为什么它不包含AppUser
?
上下文类:
public class AntContext : IdentityDbContext<AppUser>
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
Database.SetInitializer<AntContext>(null);
modelBuilder.Entity<AppUser>().ToTable("AppUsers");
base.OnModelCreating(modelBuilder);
}
控制器中的UserManager构造函数调用:
private UserManager<AppUser> userManager = new UserManager<AppUser>(new UserStore<AppUser>());
答案 0 :(得分:1)
在创建角色时,请确保将角色保存到数据库时,在“角色名称”之前或之后没有多余的空格。我浪费了一天的3/4,试图追查发生这种情况的原因。
答案 1 :(得分:0)
您似乎具有“系统管理员” 的角色,并且可能还有很多其他角色。
您应该使用[Authorize(Roles = "RoleName")]
例如:-[Authorize(Roles = "SystemAdministrator")]
在数据库中交叉验证您是否具有相应的角色。