我有一个自定义授权标头,用于在允许用户调用控制器操作之前检查当前用户是否具有特定权限。
[HasPermission(Permission.ViewPage]
public ActionResult Index()
{
return View();
}
HasPermission
类继承自AuthorizeAttribute
并重写OnAuthorization
如下所示:
public override void OnAuthorization(AuthorizationContext context)
{
if (!Permissions.IsUserInPermission(Permission))
{
context.Result = new ViewResult{ ViewName = "Forbidden" };
}
}
这几乎适用于所有内容,除了部分视图。
当我将授权属性放在返回部分的操作上时,将按预期返回禁止查看,但它具有完整的布局。完整布局包含页面上的所有其他元素,如菜单,因此它看起来像是另一个版本的网站的 iframe。
当返回部分视图的控制器操作授权失败时,有没有办法返回部分视图?
还是我只是以错误的方式这样做?
将返回 PartialViewResult 的操作标记为 [ChildActionOnly],然后您可以检查上下文。筛选器 OnAuthorization 方法中的 Controller.ControllerContext.IsChildAction 属性
if (context.Controller.ControllerContext.IsChildAction)
{
context.Result = new PartialViewResult();
}
else
{
context.Result = new ViewResult();
}