0

역할이있는 사용자가 컨트롤러 메서드에 동적으로 액세스하도록 허용합니다. 사용자 인터페이스에 의해 각 역할에 설정된 집합이 변경 될 수 있으므로 사용자가 페이지에 동적으로 액세스 할 수 있도록하려는 일반적인 시나리오가 있습니다. 내가 가진 세 컨트롤러 동작 결과에 대한 동적 액세스

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 

Currenly 모든 세 UI는 관리자 역할 만 허용합니다. 하지만 위의 UI에 설정된 각각의 권한으로 컨트롤러 메소드에 동적으로 액세스를 설정해야합니다.

편집 : 나는 각 페이지/actionresult에 대한 Customauthorize 속성을 생성하고 성공적으로이 링크 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(); 
    } 
} 

과 같은 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"); 
+0

시간 내 주셔서 감사합니다. 나는 그것을 얻지 못합니다. 어떻게 롤 ("등급")에 대한 가치를 동적으로 얻을 수 있습니까? – gs11111

+0

admin 페이지를 만들고 다음을 사용할 수 있습니다 :'Roles.AddUserToRole ("MyUserName", "Rating"); ' –

+0

'Admin ','Employee '및'customer '로 미리 정의 된 역할이 있습니다. 현재 관리자 권한을 가진 사용자는 '1'이 설정되어 있으므로 모든 UI에 액세스하십시오. SAles를 '0'으로 변경하면 관리자 액세스가 제한 될 수 있습니다. – gs11111