Sto cercando di riutilizzare gli attributi Autorizzazione controller/azione attualmente definiti che specificano i ruoli di accesso utente per la visualizzazione di voci di menu (in modo che un utente veda solo le voci di menu a cui ha accesso).Reuse MVC Controller Roles Autorizzazione per la visualizzazione delle voci di menu
Attualmente la visualizzazione delle voci di menu e dei ruoli di attributo autorizza controller/azione sono distinti, quindi eventuali modifiche richiederebbero l'aggiornamento in due punti, che potrebbero essere soggetti a errori in futuro.
ho cercato in personalizzati Autorizza attributi, e questo è quello che ho finora:
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"
})
);
}
}
MenuItems sono essenzialmente costituiti dei ruoli utente la voce di menu è disponibile per, un'etichetta testuale per la visualizzazione frontend e l'url dal controller e l'azione. I MenuItem vengono visualizzati in una vista parziale a seconda che l'utente corrente abbia il ruolo richiesto per visualizzare l'oggetto MenuItem.
Da quello che vedo, potrei aver bisogno di un elenco completo di tutte le azioni del controller e dei ruoli utente associati da riutilizzare in entrambe le aree, esiste un modo più elegante per raggiungere questo obiettivo?