asp.net MVC3 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();
}
과거에 다음과 같은 기준이 충족 될 때만 출력을 반환하는 도우미 함수를 만들었습니다.
public static MvcHtmlString If(this MvcHtmlString value, bool evaluation)
{
return evaluation ? value : MvcHtmlString.Empty;
}
그래서 이것을 사용할 수 있습니다 :
@Html.ActionLink("Create New", "Create").If(User.IsInRole("Administrators"))
이렇게하면 읽기 쉽고 짧습니다.
코드 블록을 원하면 뷰에서 수행합니다.
@if (Roles.IsUserInRole("Administrators"))
{
<li>@Html.ActionLink("Create New", "Create")</li>
}
평가가 거짓 인 경우 반환 할 선택적 MvcHtmlString 매개 변수를 제공하도록 Richard의 코드를 수정했습니다.
public static MvcHtmlString If(this MvcHtmlString value, bool evaluation, MvcHtmlString falseValue = default(MvcHtmlString))
{
return evaluation ? value : falseValue;
}
활성화하지 않았는데도 roleManager
여전히 사용자의 역할을 확인하려면 다음과 같이 할 수 있습니다.
@if (@User.IsInRole("administrator"))
{
@Html.ActionLink("Create New Version", "Create")
}
여기서 우리가하는 것은 사용자의 속성에 액세스하는 것입니다. 역할을 직접 관리하는 경우 유용 할 수 있습니다.
Richard가 제안한 솔루션은 정말 아름답습니다. Matthieu가 누군가가 렌더링 (또는 렌더링되지 않음)을 위해 추가 html 코드가 필요할 수 있다고 지적했듯이. 따라서 Matthieu의 솔루션은 더 광범위하게 적용 할 수있는 것으로 보이며 확장 방법에서 어떤 사용자가 관리자로 간주되는지에 대한 논리를 중앙 집중화 할 것입니다.
연장 방법 :
public static bool IsAdmin(this WebViewPage page)
{
return page.User.IsInRole(@"Domain\ProjectAdmins");
}
용법:
@if (this.IsAdmin())
{
<p>
@Html.ActionLink("Create New Version", "Create")
</p>
}
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" })
참고 URL : https://stackoverflow.com/questions/6981853/asp-net-mvc3-razor-display-actionlink-based-on-user-role
'Programing' 카테고리의 다른 글
RGB 색상을 HSV로 변경하는 방법은 무엇입니까? (0) | 2020.11.27 |
---|---|
WPF에서 전체 TreeViewItem 줄 강조 표시 (0) | 2020.11.27 |
Java에서 두 날짜 간의 차이를 어떻게 초 단위로 얻습니까? (0) | 2020.11.26 |
방법 : Ubuntu 11.10에 Imagick (php 용) 설치 (0) | 2020.11.26 |
애플리케이션 컨텍스트 초기화 이벤트에 후크를 추가하는 방법은 무엇입니까? (0) | 2020.11.26 |