`[Authorize (Roles="Role")]` 不起作用,User.IsInRole("Role") 始终为 false
Posted
技术标签:
【中文标题】`[Authorize (Roles="Role")]` 不起作用,User.IsInRole("Role") 始终为 false【英文标题】:`[Authorize (Roles="Role")]` not working, User.IsInRole("Role") always false 【发布时间】:2019-03-06 10:20:35 【问题描述】:我觉得我错过了什么。 Authorize
本身有效,但使用角色无效。 cshtml-Code 包含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
这样的身份表。我上周从 Forms-Authentication 迁移到 Identities,这可能是现在的问题。我是否必须相应地更改上下文?它继承自IdentityDbContext<AppUser>
,这就是为什么我不能只添加AspUser
stuff(因为它已经存在),但是当我在运行时查看上下文时,它不存在......
下一次编辑:我的角色经理缺少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>());
【问题讨论】:
【参考方案1】:当您创建角色时...确保在将角色名称保存到数据库时之前或之后没有多余的空格。我浪费了一天 3/4 的时间试图追查为什么会发生这种情况。
【讨论】:
感谢您的提示,我确实做到了。它们在数据库中(表AspNetRoles
)。评论老问题也没有错!【参考方案2】:
您似乎拥有 “SystemAdministrator” 角色,并且可能还有许多其他角色。
你应该使用[Authorize(Roles = "RoleName")]
例如:- [Authorize(Roles = "SystemAdministrator")]
如果您具有相应的角色,请在您的数据库中进行交叉验证。
【讨论】:
在我的数据库中,表AspNetRoles
中存在一个角色“SystemAdministrator”。在表AspNetUserRoles
中,管理员用户使用他们的Id 和正确的RoleId。需要明确的是,我使用的是[Authorize (Roles ="SystemAdministrator")]
,这与我制作的更通用的标题不同。
您的意思是向数据库中添加新角色吗?不确定,但是在控制器中为用户做AddToRole
什么都不做,这个角色仍然不考虑。
var _context = new ApplicationDbContext(); var UserManager = new UserManager(new UserStore(_context)); UserManager.AddToRole("UserName", "UserRole");
blogs.msdn.microsoft.com/webdev/2013/10/20/…
这也不起作用。我尝试通过 ID 将用户添加到角色(这不会崩溃,这意味着它有效),它仍然说用户没有角色。以上是关于`[Authorize (Roles="Role")]` 不起作用,User.IsInRole("Role") 始终为 false的主要内容,如果未能解决你的问题,请参考以下文章
.NET Core 本地开发时绕过或关闭[Authorize(Roles="")]
如何解决始终返回使用 [Authorize(Roles = "Manager")] 的未经授权状态?
ASP.NET Core 身份 [Authorize(Roles ="ADMIN")] 不起作用
`[Authorize (Roles="Role")]` 不起作用,User.IsInRole("Role") 始终为 false
为啥 [Authorize(Roles = "Admin")] 不能在具有 ASP.NET 标识的 MVC 5 RTM 中工作?