具有自定义属性的MVC角色

时间:2013-02-20 22:37:18

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

我正在研究如何在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...
}

1 个答案:

答案 0 :(得分:2)

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

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