【问题标题】:How To Use [Authorize] properly如何正确使用【授权】
【发布时间】:2016-08-19 08:43:11
【问题描述】:

我有两组用户,一组正在招聘,另一组正在招聘。

我想限制每组用户对某些页面的访问,但是当我在控制器中使用 [Authorize] 时,它允许访问任何已登录的用户而不区分他们来自哪个组?

   [HttpPost]
        public ActionResult Signin(string username, string password)
        {
            var mgr = new Cleaners.Models.UserManager(@"Data Source=.\sqlexpress;Initial Catalog='Cleaning Lady';Integrated Security=True");
            var user = mgr.GetUser(username, password);
            if (user == null)
            {
                return View(new UserViewModel { Name = username });
            }

            FormsAuthentication.SetAuthCookie(user.UserName, true);
            UserViewModel.IsAuthenticated = User.Identity.IsAuthenticated;
            return RedirectToAction("Private");
        }

        [Authorize]
        public ActionResult Private()
        {
            return View();

        }

有没有办法限制通过此控制器验证的用户对“私人”的访问?

【问题讨论】:

  • 您可以使用身份角色并基于它们进行授权。
  • 请注意,model-view-controller 标签是针对有关模式的问题。 ASP.NET-MVC 实现有一个特定的标签。

标签: c# asp.net-mvc authorize-attribute


【解决方案1】:

我举一个简单的例子:

    [Authorize(Roles="Contractor")]
    public ActionResult Private()
    {
        return View();

    }

这将检查当前用户/身份是否有一个名为 Contractor 的角色。

我建议您阅读this article 以了解它的基础知识。

【讨论】:

  • 除此之外,您还可以创建自己的自定义授权属性,该属性扩展 Authorize 类以根据需要检查权限。 msdn.microsoft.com/en-us/library/…
  • 或者我们可以自己实现IUserStore,实现自定义逻辑。我有一种情况,用户可能属于具有配置文件的组,而配置文件具有角色(非常细化)。这很好,因为如果您还使用 Web Api,则不必同时实现 Authorizes(在 Core 1.0 中不再是问题)。
  • 谢谢! @Alisson 你能简单地向我解释一下如何在数据库中存储他们的角色,以及如何提取这些信息以便让他们访问吗?谢谢!
  • Asp.net Identity,将创建一个 Roles 表,在您的情况下,您应该在其中插入应用程序的角色(手动或种子方法,就像在 EF 中那样) ,你有两个。还有一个AspNetUsers 表用于存储用户,另一个表用于AspNetUserRoles,您可以在其中配置哪些用户具有哪些角色。设置完成后,Authorize 将正常工作。我建议你阅读 asp.net Identity 并了解它,这并不难。我认为 SO 不是教如何做事的正确地方,更多的是解决你遇到的一些问题,否则我可以提供更多细节。
猜你喜欢
  • 2012-08-25
  • 2021-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-16
  • 2021-07-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多