Защита действий контроллера в ASP.NET MVC - PullRequest
0 голосов
/ 02 февраля 2010

В ASP.NET MVC 2 для защиты действия контроллера я создал класс RequirePermission, унаследованный от класса ActionFilterAttribute. Действие контроллера выглядит как

[RequirePermission(permissions="CanView")]

    public ActionResult List()
    {
       ...
    }

У меня есть перечисление с именем Permissions

public enum Permissions { CanDoEdit, CanView, CanInsert }

Класс RequirePermission выглядит как

public class RequirePermission : ActionFilterAttribute
    {
        public string permissions;
        string[] param = { "," };
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {

            string[] requirePermissions = permissions.Split(param, StringSplitOptions.RemoveEmptyEntries);


           if (requirePermissions.Contains(Permissions.CanDoEdit.ToString()))
           {
                     //Check permission 
           }
           if (requirePermissions.Contains(Permissions.CanView.ToString()))
           {
                     //Check permission 
           }
           if (requirePermissions.Contains(Permissions.CanInsert.ToString()))
           {
                    //Check permission 
           }
        }
    } 

Теперь вместо создания разных атрибутов я хочу использовать атрибут RequirePermission, например: [RequirePermission(permissions=Permissions.CanView+","+Permissions.CanEdit)] так что я могу использовать его для разных пейзажей. но компилятор выдает следующую ошибку.

Аргументом атрибута должно быть константное выражение, выражение typeof или выражение создания массива типа параметра атрибута

1 Ответ

4 голосов
/ 02 февраля 2010

Как насчет:

[Flags]
public enum Permissions 
{ 
    CanDoEdit = 1 << 0, 
    CanView = 1 << 1,
    CanInsert = 1 << 2
}

А потом:

[RequirePermission(permissions = Permissions.CanView & Permissions.CanEdit)]

И наконец, чтобы убедиться, что CanView установлен:

if ((requirePermissions & Permissions.CanView) == Permissions.CanView)
{
    // The user has CanView permission
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...