Можно ли использовать пользовательские фильтры в режиме бритвы?Возможно ли использовать пользовательские фильтры на основе AuthorizeAttribute в представлении Razor?
К примеру, у меня есть это работает в контроллере:
[Privilege(Privileges ="AdminRead, AdminWrite"))]
public ActionResult Index()
{
return View();
}
Но есть возможность сделать что-то вроде следующего в Бритва cshtml файле:
if(@[Privilege(Privileges ="AdminRead, AdminWrite"))])
{
//html goes here
}
Если это делает разница, атрибут PrivilegeAttribute происходит от AuthorizeAttribute.
PrivilegeAttribute.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
namespace IdentityDevelopment.Infrastructure
{
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = true)]
public class PrivilegeAttribute : AuthorizeAttribute
{
private static readonly string[] _emptyArray = new string[0];
private string _privileges;
private string[] _privilegesSplit = _emptyArray;
public string Privileges
{
get { return _privileges ?? String.Empty; }
set
{
_privileges = value;
_privilegesSplit = SplitString(value);
}
}
internal static string[] SplitString(string original)
{
if (String.IsNullOrEmpty(original))
{
return _emptyArray;
}
var split = from piece in original.Split(',')
let trimmed = piece.Trim()
where !String.IsNullOrEmpty(trimmed)
select trimmed;
return split.ToArray();
}
public PrivilegeAttribute(string privilegeList)
{
_privileges = privilegeList;
}
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
bool isAuthorized = base.AuthorizeCore(httpContext);
if (isAuthorized) {
string[] rolesArray;
var roles = ((ClaimsIdentity)httpContext.User.Identity).Claims
.Where(c => c.Type == ClaimTypes.Role)
.Select(c => c.Value);
rolesArray = roles.ToArray();
//Assume that a user can only be associated to 0 or 1 role. If 0 the rolesArray will be null.
if (rolesArray != null)
{
string roleUser = rolesArray[0];
SQLRolerecord CheckPrivInRole = new SQLRolerecord();
return CheckPrivInRole.Allow(roleUser, _privilegesSplit);
}
else
{
return false;
}
}
else
{
return false;
}
}
}
}
Спасибо.
Это невозможно? '@if (User.IsInRole (« WhateverUserRole »))' – techspider
или '@if (User.IsAuthorized)' должен делать это – jbutler483
@techspider Да, я использовал это и возможно, но как насчет пользовательских атрибутов AuthorizeAttributes? Например, у меня есть один, называемый PrivilegeAttribute, который принимает вход, называемый «Привилегии», так как же я мог бы сделать подобное? Как создать метод с именем IsInPrivilege? – ITWorker