使用actionfilterattribute的基于mvc角色的权限

时间:2011-08-05 20:16:26

标签: asp.net-mvc model-view-controller permissions actionfilterattribute asp.net-roles

所以我正在建立我对mvc网站的许可。我正在做一个基于角色的权限,在控制器中执行操作需要不同的角色,具体取决于操作的目的。 我知道最推荐的是authorizeattribute(因为我想要缓存的角色)但是有可能和actionfilterattribute一样吗?

目前我有一个类似于此的actionfilterattribute:

public class PermissionRequired : ActionFilterAttribute{
   private readonly Role reqrole;
   public PermissionRequired(Role reqRole)
   {
         reqrole = reqRole;
   }

   public override void OnActionExecuting(ActionExecutingContext filterContext) {
        var ctrl = (GeneralController)filterContext.Controller;

        if (!ctrl.CurrentUser.InRole(reqrole)) {
               //some code to redirect this to a certain page
        }
        base.OnActionExecuting(filterContext);
    }
}

并在GeneralController上获取当前用户

public class GeneralController : Controller

    private User currentUser;
    public User CurrentUser {
        get {
            if (currentUser != null)
                return currentUser;

            int currentUserId = Convert.ToInt32(httpContext.User.identity.Name); 

            if (currentUserId != 0) {
                this.currentUser = Tds.Users.FirstOrDefault(u => u.Id == currentUserId)
            }

            return currentUser;
        }
    }

以及将继承此属性的控制器

[PermissionRequired(Role.Moderator)]
public class SomeControllerThatNeedsPermission
{
    [PermissionRequired(Role.SuperAdmin)]
    public ActionResult SomeActionThatNeedsPermission()
      {
      }
}

所以,任何人的帮助都表示赞赏..甚至欢迎评论或想法:D

非常感谢!

1 个答案:

答案 0 :(得分:0)

您好像没有在这里使用自定义会员资格。在这种情况下,使用actionfilterattribute执行此操作有点毫无意义,但仍然可以。

关于同一主题的

This is an excellent article - 扩展AuthorizeAttribute以执行基于角色的验证并返回自定义错误......

当您希望向授权用户显示授权失败时(401未显示在mvc管道内部变为302)时,这样做的价值也只会出现(如文章中所述)< / p>