【问题标题】:How can I restrict access to certain views and actions in MVC 5?如何限制对 MVC 5 中某些视图和操作的访问?
【发布时间】:2014-10-10 04:56:37
【问题描述】:

我有三个模型,分别命名为 Category、Subcategory 和 Service。然后,我为它们中的每一个创建了一个使用 Entity Framework 的控制器,该控制器还为它们创建了视图。因此,对于它们中的每一个,我都有单独的创建、删除、编辑、详细信息和索引视图。关键是我还在我的 ApplicationUser 类中添加了一个属性,用于检查用户是否为管理员。即,我添加了这个属性:

public bool IsAdmin { get; set; }

所以,重点是,我想检查用户是否是管理员,并采取相应的行动。如果用户是管理员,我希望他/她能够查看这些视图,并通过这些视图简单地操作数据(使用控制器)。但是,如果他/她不是管理员,我想显示一条消息,表明他/她无权查看这些页面和更改数据。如何在 MVC 中实现它?有可能吗?

【问题讨论】:

    标签: asp.net-mvc authorization


    【解决方案1】:

    嗯,首先,你做错了。虽然您可以使用用户类上的属性来实现您想要的,但您基本上必须重新实现 MVC 和 Identity 已经为您提供的功能。

    所以,我不会把你带进兔子洞,而是把你拉回来。首先,“管理员”状态应该是一个角色。如果用户是管理员,只需给他们一个“管理员”或“管理员”角色或任何您想称呼的角色。

    然后,在您的控制器/操作中,您可以使用Authorize 属性并指定可接受角色的列表。例如,以下内容会将整个控制器限制为仅具有“管理员”角色的控制器:

    [Authorize(Roles = "Admin")]
    public class FooController : Controller
    

    如果该控制器中有任何人都应该能够访问的特定操作,无论是否登录,您仍然可以保护整个控制器,但在相关操作上使用AllowAnonymous:

    [Authorize(Roles = "Admin")]
    public class FooController : Controller
    {
        [AllowAnonymous]
        public ActionResult UnprotectedAction()
        {
            ...
        }
    }
    

    您也可以直接在您的操作上添加Authorize 属性:

    [Authorize(Roles = "Admin")]
    public ActionResult AdminOnlyAction()
    {
        ...
    }
    

    【讨论】:

    • 感谢您的精彩回答!
    • 喜欢这个美丽的答案。
    • 喜欢这个美丽的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-28
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2021-05-03
    相关资源
    最近更新 更多