역할이있는 사용자가 컨트롤러 메서드에 동적으로 액세스하도록 허용합니다. 사용자 인터페이스에 의해 각 역할에 설정된 집합이 변경 될 수 있으므로 사용자가 페이지에 동적으로 액세스 할 수 있도록하려는 일반적인 시나리오가 있습니다. 내가 가진 세 컨트롤러 동작 결과에 대한 동적 액세스
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
의 방법을 사용하여 결과를 얻었다하지만 내 문제는 이제 레이아웃의 메뉴 (보기)를 숨기는 것입니다있다 페이지
시간 내 주셔서 감사합니다. 나는 그것을 얻지 못합니다. 어떻게 롤 ("등급")에 대한 가치를 동적으로 얻을 수 있습니까? – gs11111
admin 페이지를 만들고 다음을 사용할 수 있습니다 :'Roles.AddUserToRole ("MyUserName", "Rating"); ' –
'Admin ','Employee '및'customer '로 미리 정의 된 역할이 있습니다. 현재 관리자 권한을 가진 사용자는 '1'이 설정되어 있으므로 모든 UI에 액세스하십시오. SAles를 '0'으로 변경하면 관리자 액세스가 제한 될 수 있습니다. – gs11111