【问题标题】:MVC roles with custom properties具有自定义属性的 MVC 角色
【发布时间】:2013-02-06 03:05:05
【问题描述】:

我正在研究如何在 MVC 4 (.NET 4.5) 中实现授权,并且一直在阅读有关 SimpleMembership 的信息。 MVC 中是否有任何典型或公认的方式来让角色具有除名称之外的其他属性?

例如,假设您正在设计一个 CMS,并且希望能够拥有一个名为 Writer 的角色,让用户进行修改。但是,您还希望角色仅限于单个页面。我所知道的唯一方法是为每个页面设置一个单独的角色,其中每个角色的名称可能类似于Writer_<PageID>。有没有比这更好的模式,或者这几乎是我们所能做的?

理想情况下,我想知道是否有某种方法可以远程获得类似的东西:

public ActionResult EditPage(Page page) {
    WriterRole role = new WriterRole(page);

    if (!User.IsInRole(role)) {
        return NotAuthorized();
    }

    // Edit...
}

代替:

public ActionResult EditPage(Page page) {
    string role = "Writer_" + page.Id;

    if (!User.IsInRole(role)) {
        return NotAuthorized();
    }

    // Edit...
}

【问题讨论】:

  • 我看了一眼简单的会员资格,对我来说似乎并不那么简单。我决定在我正在进行的项目中坚持使用当前的会员提供商,我喜欢它。
  • @Nick,我正在寻找的东西在 SimpleMembership 之外是否可行?
  • 为了解决您的问题,您需要有一个数据库表,其中包含允许查看的页面的用户 ID 和页面 ID。您可能可以从中创建一个属性。我不认为角色与它有任何关系,你的标准对他们来说太具体了。
  • @Nick,谢谢,这就是我的怀疑,但想确认一下。
  • 我对属性不太熟悉,但我怀疑您可以从路由数据中获取页面 id 并最终检查您的数据库。如果未经授权,您可以重定向到自定义错误页面。 (我可能会返回未授权的 HTTP 代码)。

标签: c# .net asp.net-mvc-4 roles simplemembership


【解决方案1】:

我要做的是拥有一个 Writer 角色,然后检查 UserId 以查看此人是否拥有可编辑资源。

[Authorize(Roles = "Writer")]
public ActionResult EditPage(Page page) {
    if (User.UserId == page.UserId) { ... }
}

【讨论】:

  • 这不适用于页面可能有多个编辑器的情况。我想一个页面可以存储其编辑器的列表,或者用户可以存储其可编辑页面的列表,但是与这样的角色分开似乎很脏(事实上,它完全没有在全部)。
猜你喜欢
  • 1970-01-01
  • 2014-01-23
  • 2013-01-05
  • 2012-10-27
  • 1970-01-01
  • 2012-11-21
  • 2023-03-03
  • 1970-01-01
  • 2012-03-19
相关资源
最近更新 更多