В 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 выражение создания выражение или массив типа параметра атрибута
спасибо. – Adeel
На самом деле я допустил ошибку, используя 'Permissions.CanView | Permissions.CanEdit'. Я думаю, что это должно быть 'Permissions.CanView & Permissions.CanEdit', чтобы выразить, что у пользователя есть оба разрешения. –
Я думаю, вы ошибаетесь. Чтобы установить оба разрешения, используйте Permissions.CanView | Permissions.CanEdit. Но чтобы избежать переписывания значений перечисления, я установил значения в полях 2. – Adeel