Разрешение на основе ролей mvc с использованием actionfilterattribute - PullRequest
0 голосов
/ 06 августа 2011

Итак, я настраиваю свое разрешение для веб-сайта MVC.И я делаю разрешение на основе ролей, для выполнения действий в контроллере потребуются разные роли в зависимости от цели действия.Я знаю, что наиболее рекомендуемым будет атрибут authorizeattribute (так как я хочу, чтобы роли кэшировались), но возможно ли иметь то же самое с actionfilterattribute?

В настоящее время у меня есть атрибут actionfilterattete, подобный этому:

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 голосов
/ 06 августа 2011

Похоже, вы здесь не используете пользовательское членство. В этом случае делать это с помощью actionfilterattribute несколько бессмысленно, но, тем не менее, это возможно.

Это отличная статья на ту же тему - расширение атрибута AuthorizeAttribute для выполнения проверки на основе ролей и возврата пользовательских ошибок ...

Значение в этом случае также встречается (как объяснено в статье), когда вы хотите показать пользователям, что происходит, когда авторизация не удалась (401 не показано, она превращается внутри в 302 в канале mvc)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...