Czekam na ponowne wykorzystanie moich aktualnie zdefiniowanych atrybutów autoryzacji kontrolera/działania, które określają role dostępu użytkownika do wyświetlania pozycji menu (tak, że użytkownik widzi tylko pozycje menu, do których ma dostęp).Ponowne użycie uprawnień kontrolera MVC do wyświetlania pozycji menu
Obecnie wyświetlanie pozycji menu i autoryzacja kontrolera/akcji są różne, więc wszelkie zmiany wymagają aktualizacji w dwóch miejscach, co może być podatne na błędy w przyszłości.
czekałem na zamówienie Autoryzacja atrybutów, i to, co mam tak daleko:
public class MyAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var isAuthorized = base.AuthorizeCore(httpContext);
if (!isAuthorized)
{
return false;
}
var routeData = httpContext.Request.RequestContext.RouteData;
string currentAction = routeData.GetRequiredString("action");
string currentController = routeData.GetRequiredString("controller");
var currentUserRoles = GetCurrentUserRoles();
// from the list of menu items, find the menu item with the current action
// and controller and check the current user's roles entitle access
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary(
new
{
controller = "Error",
action = "Unauthorised"
})
);
}
}
elementów menu są zasadniczo składał się z ról użytkowników pozycja menu jest dostępne, etykiety tekstowej na wyświetlaczu frontend i URL od kontrolera i działania. MenuItems są renderowane w częściowym widoku w zależności od tego, czy bieżący użytkownik jest w wymaganej roli do wyświetlenia MenuItem.
Z tego co widzę, potrzebuję wyczerpującej listy wszystkich działań kontrolerów i powiązanych ról użytkowników, które będą ponownie wykorzystywane w obu obszarach, czy istnieje bardziej elegancki sposób na osiągnięcie tego?