C# 在ASP.NET MVC中保护控制器操作
在ASP.NET MVC 2中,为了保护控制器操作,我创建了一个从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 {
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。