In ASP MVC abbiamo l'attributo Authorize per eseguire il controllo a livello di controller o a livello di metodo controller. Ma cosa succede se hai bisogno di controllare le autorizzazioni all'interno di un metodo di controllo, per esempio, lascia che tu faccia qualche aggiornamento o crei un'azione per inviare un post sul blog. Alcuni utenti con autorizzazioni revant possono allegare file o rendere il post del blog appiccicoso. Pertanto, quando si crea un nuovo post, è necessario eseguire tutti questi controlli aggiuntivi prima di salvare il modello. In Laravel esiste il concetto di abilità in cui è possibile eseguire controlli all'interno di un metodo di controllo per verificare se un utente ha la capacità di eseguire le azioni pertinenti. Allo stesso modo puoi usare queste abilità nelle viste per controllare quale elemento mostrare o nascondere - tutto questo viene fuori dalla scatola.
C'è qualcosa di simile in ASP MVC. Come implementereste il controllo delle autorizzazioni all'interno di un metodo di controllo. Crei una classe di autorizzazione con proprietà come
public class Permissions
{
private readonly IPrincipal user;
public Permissions (IPrincipal user)
{
this.user = user;
}
public bool CanUploadFiles
{
get { return user.IsInAnyRole("Standard", "Admin"); }
}
public bool CanDeleteItems
{
get { return user.IsInRole("Admin"); }
}
public bool CanLockPost
{
get { return user.IsInRole("Admin"); }
}
// other permissions
}
Quindi all'interno dell'azione del controller:
public ActionResult Create(PostViewModel viewModel)
{
var permissions = new Permissions(User);
if (ModelState.IsValid)
{
var post = new Post
{
if (permissions.CanLockPost)
{
post.IsLocked = viewModel.IsLocked;
}
if (permissions.CanStickyPost)
{
post.IsSticky = viewModel.IsSticky;
}
// Set other properties
}
_postRepository.Add(post);
}
}
O vorresti salvare le autorizzazioni nel database. Mi piacerebbe sentire le tue opinioni su come implementare i controlli a un livello più granulare rispetto a un semplice livello di azione di controller o controller. Alcuni esempi di codice da dimostrare sarebbero utili.