C# 在ASP.NET MVC中保护控制器操作

C# 在ASP.NET MVC中保护控制器操作,c#,asp.net,asp.net-mvc-2,C#,Asp.net,Asp.net Mvc 2,在ASP.NET MVC 2中,为了保护控制器操作,我创建了一个从ActionFilterAttribute类继承的类requireMission。控制器操作看起来像 [RequirePermission(permissions="CanView")] public ActionResult List() { ... } public class RequirePermission : ActionFilterAttribute {

在ASP.NET MVC 2中,为了保护控制器操作,我创建了一个从
ActionFilterAttribute
类继承的类
requireMission
。控制器操作看起来像

[RequirePermission(permissions="CanView")]

    public ActionResult List()
    {
       ...
    }
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 
           }
        }
    } 
我有一个名为
权限的枚举

public enum Permissions { CanDoEdit, CanView, CanInsert }
requiremission
类如下所示

[RequirePermission(permissions="CanView")]

    public ActionResult List()
    {
       ...
    }
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 
           }
        }
    } 
现在,我想使用
requirecommission
属性,而不是创建不同的属性
[requirecommission(permissions=permissions.CanView+,“+permissions.CanEdit)]
以便我可以将其用于不同的场景。但是编译器抛出以下错误

属性参数必须是常量表达式、typeof表达式或属性参数类型的数组创建表达式

如何:

[Flags]
public enum Permissions 
{ 
    CanDoEdit = 1 << 0, 
    CanView = 1 << 1,
    CanInsert = 1 << 2
}
最后,验证是否设置了CanView:

if ((requirePermissions & Permissions.CanView) == Permissions.CanView)
{
    // The user has CanView permission
}
那么:

[Flags]
public enum Permissions 
{ 
    CanDoEdit = 1 << 0, 
    CanView = 1 << 1,
    CanInsert = 1 << 2
}
最后,验证是否设置了CanView:

if ((requirePermissions & Permissions.CanView) == Permissions.CanView)
{
    // The user has CanView permission
}

实际上,我犯了一个错误,使用了
Permissions.CanView | Permissions.CanEdit
。我认为应该是
Permissions.CanView&Permissions.CanEdit
来表示用户同时拥有这两种权限。我认为你错了。要设置这两个权限,请使用permissions.CanView | permissions.CanEdit。但为了避免覆盖枚举值,我将值设置为2。实际上,我使用了
Permissions.CanView | Permissions.CanEdit
犯了一个错误。我认为应该是
Permissions.CanView&Permissions.CanEdit
来表示用户同时拥有这两种权限。我认为你错了。要设置这两个权限,请使用permissions.CanView | permissions.CanEdit。但是为了避免覆盖枚举值,我将值设置为2。