动态访问行动结果

时间:2014-07-11 06:54:00

标签: asp.net-mvc asp.net-mvc-5 privileges roleprovider custom-membershipprovider

允许具有角色的用户动态访问控制器方法。 我有一个典型的场景,我希望允许用户动态访问页面,因为可以通过用户界面更改为每个角色设置的prvilege。 我有三个行动结果

控制器:

 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

Currenly所有三个UI仅允许管理员角色。但我需要使用上述UI中的相应权限设置动态访问Controller方法。

修改 我为每个Page / actionresult创建了Customauthorize属性,并使用此链接中的方法成功获得了结果 asp.net mvc decorate [Authorize()] with multiple enums

但我现在的问题是隐藏布局(视图)页面中的菜单

1 个答案:

答案 0 :(得分:1)

目前您为&#34;群组&#34;分配权限用户使用类似以下内容的方式为单个用户分配权限可能更容易:

public class HomeController : Controller
{
    [CustomAuthorize(Roles="Rating")]
    public ActionResult UI01(){
        return View();
    }

    [CustomAuthorize(Roles="Map")]
    public ActionResult UI02(){
        return View();
    }

    [CustomAuthorize(Roles="Sales")]
    public ActionResult UI03(){
        return View();
    }
}

UI看起来像:

@*menu items*@
@if((Roles.IsUserInRole("Rating")){
  <li>@Html.ActionLink("Rating", "UI01", "Home")</li>
}

@if((Roles.IsUserInRole("Map")){
  <li>@Html.ActionLink("Map", "UI02", "Home")</li>
}

@if((Roles.IsUserInRole("Sales")){
  <li>@Html.ActionLink("Sales", "UI03", "Home")</li>
}

然后,您可以创建管理页面以将角色分配给用户。使用如下代码:

System.Web.Security.Roles.AddUserToRole("MyUserName", "Rating");