【发布时间】:2017-07-10 00:00:38
【问题描述】:
我正在处理一个项目,其中一些用户可以担任AdminReader 角色。这些用户可以查看所有内容,但无法保存/编辑任何数据。
我知道我可以这样做:
public JsonResult ChangeStatus(int? id)
{
// AdminReader validation
if (base.User.isAdminReader)
{
return Json(new
{
Message = "You don't have privileges to alter data.",
Success = false,
}, JsonRequestBehavior.AllowGet);
}
// Function code
但我不想在所有项目函数中插入上述代码。
我想我可以像使用 [HttpGet] 一样装饰我的方法。我也读过这个SO post。
然后我放弃了这个想法。
但后来我发现了异常处理程序属性和日志记录操作过滤器。
是否有可能以某种方式将 public void OnActionExecuting(ActionExecutingContext filterContext) 与我的 AdminReader 验证结合起来?
我不知道这是否是解决我的问题的正确方法。另外,我不确定它是否真的可以工作。在这种情况下,最佳做法是什么?
欢迎任何建议,在此先感谢。
【问题讨论】:
-
您想限制一整套控制器,使其只能由一个角色访问吗?
-
@BillRuhl。假设一个带有按钮的表格列表可以更改每行的状态(这是我的示例)。
AdminReader可以看到表列表(控制器中的PartialViewResult),但不能看到ChangeStatus(同一控制器中的JsonResult)。它几乎适用于每个控制器,无论是带有按钮来更改状态的列表,还是带有按钮来编辑值的模式。视图是可访问的,但方法不应该是 -
我会在视图本身而不是在控制器中尝试 @if (User.Identity.IsAuthenticated && !User.IsInRole("AdminReader")){ //render button}。换句话说,如果用户的角色是“AdiminReader”,那么不要渲染按钮..
标签: c# asp.net-mvc