Siemka!
W jaki sposób, mam ograniczyć widoczność linku w menu, chcę żeby był widoczny tylko dla roli administrator. Korzystam ze defaultowego systemu logowania dostarczonego przez ef, widok oczywiście gdy wpisuje link działa tylko dla zalogowanego admina.
Z góry dzięki za pomoc
Wrzucasz fragment, który renderuje dany link w blok:
@if (ViewContext.HttpContext.User.IsInRole("NazwaRoli"))
{
//...
}
Ja tylko dodam, że złym rozwiązaniem jest dawanie logiki w widoku.
zamiast if (ViewContext.HttpContext.User.IsInRole("NazwaRoli")) (czyli uzaleznienie wyswietlenia od logiki. W tym przypadku związanej z uprawnieniami),
powinno byc jakies pole w ViewModelu: np. public bool IsElementVisible { get;set; }, którego wartość powinna być ustawiona na wcześniejszej warstwie:
ViewModel.isElementVisible = ViewContext.HttpContext.User.IsInRole("NazwaRoli");
wtedy w widoku po prostu:
@if (Model.IsElementVisible) {
...
}
@micc, możesz podać cały przykład, przy założeniu, że menu jest renderowane w pliku _Layout.cshtml
? Bo zastanawiam się jak do niego przesłać ViewModel tak, aby mieć pewność, że w każdej akcji całej aplikacji zostanie zwrócony i menu wyświetli się prawidłowo.
_Layout.cshtml:
@{Html.RenderAction("TopMenu","LayoutParts");}
LayoutPartsController:
public ActionResult TopMenu() {
var TopMenuViewModel = new TopMenuViewModel();
TopMenuViewModel.CosTamVisibile = permissionService.Authorize(cosTam,workContext.CurrentUserId);
return PartialView(TopMenuViewModel);
}
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.