我尝试装饰一个完整的控制器类,如下所示:
namespace SisParkTD.Controllers
{
[CustomAuthorize]
public class AbonosController : Controller
{
我可以装饰控制器中的方法但不能装饰完整的控制器。
我尝试装饰控制器类时得到的错误是:
“CustomAuthorize”属性无效 这种声明类型。它仅对“方法”声明有效。
属性'SisparkTD.Filters.CustomAuthorizeAttribute'在此声明类型上无效。仅在“方法”声明中有效。
以下是CustomAuthorizeAttribute的代码:
namespace SisParkTD.Filters
{
[AttributeUsage(AttributeTargets.Method)]
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
using (var db = new SpContext())
{
var controller = (string)httpContext.Request.RequestContext.RouteData.Values["controller"];
var action = (string)httpContext.Request.RequestContext.RouteData.Values["action"];
var accion = db.Acciones.FirstOrDefault(a => a.Descripcion == action && a.Pagina.Descripcion == controller);
var username = httpContext.User.Identity.Name;
var usuario = db.Usuarios.FirstOrDefault(u => u.NombreDeUsuario == username);
if (usuario == null) return false;
if (accion == null) return false;
var rolesId = db.RolesUsuarios.Where(ru => ru.UsuarioId == usuario.UsuarioId).Select(ru => ru.RolId);
if (!rolesId.Any()) return false;
foreach (var rolId in rolesId)
{
if (db.Permisos.Find(rolId, accion.AccionId) != null) return base.AuthorizeCore(httpContext);
}
return false;
}
}
}
}
答案 0 :(得分:0)
从属性中删除[AttributeUsage(AttributeTargets.Method)]。 (感谢SLaks的回答)