업데이트 :이 답변은 많은 클라이언트 측 작업을 수행하고 MVC 애플리케이션과 데이터 만 통신하는 경우에 더 적합합니다. 서버의 모든 페이지를 렌더링하는 경우 Steve의 대답을 사용하십시오.
JsonResult를 반환하는 컨트롤러 작업을 사용하여 사용자의 역할을 클라이언트 측에 전달해야한다고 생각합니다. 예 :
public class SecurityController : Controller
{
public ActionResult Roles()
{
return new JsonResult
{
Data = System.Web.Security.Roles.GetRolesForUser(),
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
}
그런 다음 데이터 클라이언트 측을 검색 할 $.ajax
를 사용하여 콜백의 요구 사항과 일치하지 않는 DOM에서 노드를 제거합니다. 예 :
<ul id="menu">
<li data-roles="Administrator">
Secured
</li>
<li>Any</li>
</ul>
<script type="text/javascript">
$.ajax({
url: "security/roles",
success: function(roles) {
$("#menu li[data-roles]").filter(function() {
var requiredRoles = (this.attr("data-roles") || "").split(",");
for (var requiredRole in requiredRoles) {
if (roles.indexOf(requiredRole) >= 0) {
return false;
}
}
return true;
}).remove();
// TODO call your menu plugin here
// $("#menu").superfish();
},
error: function() {
$("#menu li[data-roles]").remove();
}
});
</script>
건배, 딘
내가 잘못 될 수있다 확실하지 오전하지만 메뉴가 표시됩니다 생각하고 doesnot 사용자가 특정 액세스 권한이있는 경우 페이지가 Access denied 페이지로 리디렉션 된 메뉴 항목을 다시 클릭합니다. 제 의견. – freebird
예, 할 수 있지만 사용자가 페이지를 볼 수 없으면 메뉴 항목 자체를 표시하고 싶지 않습니다. 어쨌든 고마워. – gunnerz