c# asp.net MVC3 면도기 : 사용자 역할을 기반으로 actionlink 표시




3 Answers

코드 블록을 원한다면보기에서 할 수 있습니다.

@if (Roles.IsUserInRole("Administrators"))
{
  <li>@Html.ActionLink("Create New", "Create")</li>
}
c# asp.net-mvc-3 razor

저는 MVC를 처음 사용합니다. 일부 사용자를 위해 일부 동작 링크를 숨길 수 있기를 바랍니다. 관리자 만보고 클릭하기를 원하는 "만들기"액션 링크가 있다고 가정 해보십시오. asp.net에서 사용할 수있는 일종의 "loggedintemplate"을 사용하려고하지만 면도기에서 작동하지 않는 것 같습니다.

나는 현재 사용자와 그녀의 역할을 검사하는 if 문과 함께 일종의 코드 블록을 사용할 수 있지만 이것이 최선의 방법은 아닐 수있다.

내 index.cshtml ..

// want some adminauth attribute here...
@Html.ActionLink("Create New", "Create")

내 컨트롤러 ..

// GET: /Speaker/Create
[Authorize(Roles = "Administrators")]
public ActionResult Create()
{
    return View();
}



roleManager 활성화하지 않았지만 여전히 사용자의 역할을 확인하려는 경우 다음과 같이 할 수 있습니다.

 @if (@User.IsInRole("administrator"))
 {
   @Html.ActionLink("Create New Version", "Create")
 }

여기서 우리가하는 일은 사용자 속성에 액세스하는 것입니다. 자신을 관리하는 경우 유용 할 수 있습니다.




App_Code / ViewFunctions.cshtml에 함수를 추가 할 수 있습니다 (누락 된 경우 작성).

@using System.Web.Mvc;
@functions{
public static object ConditionalActionLink(object actionLink, ICollection<string> arrAuthUsers)
{
    bool objIsVisible = arrAuthUsers
        .Select(s => User.IsInRole(s))
        .Where(s => s.Equals(true))
        .Any();

    return (objIsVisible)
        ? actionLink
        : MvcHtmlString.Empty;
}

이 함수를 사용하려면 다음 코드를보기에 추가하면됩니다.

@ViewFunctions.ConditionalActionLink(
@Html.ActionLink("TextToDisplay", "SomeAction", new { Area = "SomeArea", Controller = "SomeController" }), 
new string[] { "administrator","jDoe", "someOtherUser" })



Related