0

Позволяет пользователям с ролями динамически обращаться к методам контроллера. У меня типичный сценарий, когда я хочу, чтобы пользователи могли динамически обращаться к страницам, поскольку prvilege, установленный для каждой роли, может быть изменен пользовательским интерфейсом. У меня есть три ActionResultДинамический доступ к результатам action

Контроллер:

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> 
} 

авторизированным атрибут classs:

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 Все три пользовательских интерфейса допускают только роль администратора. Но мне нужно динамически устанавливать доступ к методам Controller с соответствующими привилегиями, установленными в вышеприведенном пользовательском интерфейсе.

Edit: Я создал атрибут Customauthorize для каждой страницы/ActionResult и получили результат успешно используя метод, описанный в этой ссылке asp.net mvc decorate [Authorize()] with multiple enums

Но моя проблема сейчас, чтобы скрыть меню в макете (просмотреть) страница

ответ

1

В настоящее время вы назначаете привилегии «группам» пользователей. Это может быть проще назначать привилегии отдельным пользователям использовать что-то подобное:

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(); 
    } 
} 

И интерфейс будет выглядеть следующим образом:

@*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"); 
+0

Thankyou за ваше время, я dont't получить it.Can пожалуйста проинструктировать его, как я могу получить значение ролей («рейтинг») динамически? – gs11111

+0

Вы можете создать страницу администратора и использовать: «Roles.AddUserToRole (« MyUserName »,« Rating »);' –

+0

У меня есть предопределенные роли, называемые как «Админ», «Сотрудник» и «Клиент». В настоящее время пользователи, имеющие права администратора, могут доступ ко всем пользовательским интерфейсам с момента установки «1». доступ администратора может быть ограничен, если я смену SAiles на «0». – gs11111