【发布时间】:2014-09-01 17:24:16
【问题描述】:
允许具有角色的用户动态访问控制器方法。 我有一个典型的场景,我希望允许用户动态访问页面,因为每个角色的权限集都可以通过用户界面进行更改。 我有三个 actionresult
控制器:
public class HomeController : Controller
{
[CustomAuthorize(Roles="Admin")]
Public Actionresult UI01(){
return View();
}
[CustomAuthorize(Roles="Admin")]
Public Actionresult UI02(){
return View();
}
[CustomAuthorize(Roles="Admin")]
Public Actionresult UI03(){
return View();
}
}
查看: 我通过检查管理员角色来隐藏菜单项。
@*menu items*@
@if((Roles.IsUserInRole("Admin")){
<li>@Html.ActionLink("Rating", "UI01", "Home")</li>
}
@if((Roles.IsUserInRole("Admin")){
<li>@Html.ActionLink("Map", "UI02", "Home")</li>
}
@if((Roles.IsUserInRole("Admin")){
<li>@Html.ActionLink("Sales", "UI03", "Home")</li>
}
授权属性类:
public class CustomAuthorize : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
base.HandleUnauthorizedRequest(filterContext);
}
else
{
filterContext.Result = new RedirectToRouteResult(new
RouteValueDictionary(new { controller = "Account", action = "Error" }));
}
}
}
我有一个单独的模块来为用户分配访问 UI01、UI02、UI03 的权限,如下所示。
Page name Admin Employee Customer
------------------------------------------------
Rating 1 0 0
Map 1 0 0
Sales 1 0 0
*1-allow
*0-Deny access
目前所有三个 UI 都只允许管理员角色。但是我需要使用上述 UI 中设置的权限来动态设置对 Controller 方法的访问。
编辑: 我为每个 Page/actionresult 创建了 Customauthorize 属性,并使用此链接中的方法成功获得了结果 asp.net mvc decorate [Authorize()] with multiple enums
但我现在的问题是隐藏布局(视图)页面中的菜单
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-5 privileges roleprovider custom-membershipprovider