【问题标题】:Individual page authorization based on roles in ASP.NET MVC 5基于 ASP.NET MVC 5 中角色的单个页面授权
【发布时间】:2014-03-19 09:58:54
【问题描述】:

我是 ASP.NET MVC 的新手,我正在尝试构建一个使用 MVC 5 内置授权方法的网站。

这是我到目前为止所做的:

  1. 在 AspNetUsers 表中创建了一些用户。
  2. 在 AspNetRoles 表中创建了多个角色。
  3. 通过连接 RoleID 和 UserID,通过 AspNetUserRoles 表为用户分配角色。

现在,要设置一个页面以仅向具有管理员角色的用户显示某些内容,否则将其隐藏,我已经这样做了:

@if(User.IsInRole("Admin")) 
{
    <p>You are logged in as an admin.</p>   
} else
{
    <p>You are not logged in as an admin.</p>
};

这样做可以吗,还是很糟糕?我已经使用它很长一段时间了,它按预期工作(据我所知)。

我知道我可以创建 CustomAuthorizationAttributes 并将它们分配给 Controller 中的 ActionMethods,但我对这方面的语法并不是 100% 满意。

【问题讨论】:

  • 看起来不错。将非常有限,如果您在多个地方执行此操作,则代码维护量会很高。考虑为角色名称创建一个常量集合,以便您至少可以重命名它们或在将来需要时轻松更改它们:)

标签: asp.net asp.net-mvc authorization asp.net-mvc-5 asp.net-roles


【解决方案1】:

如果您对语法感到满意,那很好。

但是你不能忘记使用 Authorize 属性来保护视图本身。您可以使用以下默认值

[Authorize(Roles = "Admin")]
public ActionResult Register()
{
...
return View();
}

【讨论】:

  • 好的,但是如果他不是管理员,这不会只是将用户发送到登录页面吗?
  • 是的,默认是这样,但这可以通过您想要的任何方式轻松更改。链接到基本页面的转到页面集合 默认转到页面 ...
猜你喜欢
  • 2019-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-14
  • 1970-01-01
  • 2018-06-18
  • 2013-02-13
  • 2017-03-09
相关资源
最近更新 更多