2010-02-02 2 views
0

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

[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 выражение создания выражение или массив типа параметра атрибута

ответ

4

Как насчет:

[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 
} 
+0

спасибо. – Adeel

+0

На самом деле я допустил ошибку, используя 'Permissions.CanView | Permissions.CanEdit'. Я думаю, что это должно быть 'Permissions.CanView & Permissions.CanEdit', чтобы выразить, что у пользователя есть оба разрешения. –

+0

Я думаю, вы ошибаетесь. Чтобы установить оба разрешения, используйте Permissions.CanView | Permissions.CanEdit. Но чтобы избежать переписывания значений перечисления, я установил значения в полях 2. – Adeel

Смежные вопросы