Sto scrivendo un sistema di archiviazione di file di esempio (esempio solo per stackoverflow).Richieste di autorizzazione per risorse specifiche
I miei modelli di dominio aspetto attuale in quanto tale:
public class User
{
public int ID { get; set; }
public string LoginIdentifier { get; set; }
public string Password { get; set; }
}
public class File
{
public int ID { get; set; }
public int UserID { get; set; }
public string FileName { get; set; }
public byte[] Data { get; set; }
}
Il codice che sto scrivendo per creare l'IPrincipal:
private static IPrincipal CreatePrincipal(User user)
{
Debug.Assert(user != null);
var identity = new GenericIdentity(user.LoginIdentifier, "Basic");
// TODO: add claims
identity.AddClaim(new Claim("Files", "Add"));
return new GenericPrincipal(identity, new[] { "User" });
}
Nel mio sistema, un utente può aggiungere file, possono anche recuperare , eliminarli e aggiornarli, tuttavia, l'avvertimento è che un utente può solo recuperare e modificare i propri file (dove File.UserID
deve corrispondere all'identità dell'utente connesso).
Il controller di My Files ha il seguente aspetto.
[Authorize]
public class FilesController : ApiController
{
private readonly FileRepository _fileRepository = new FileRepository();
public void Post(File file)
{
// not sure what to do here (...pseudo code...)
if (!CheckClaim("Files", "Add"))
{
throw new HttpError(HttpStatusCode.Forbidden);
}
// ... add the file
file.UserID = CurrentPrincipal.UserID; // more pseudo code...
_fileRepository.Add(file);
}
public File Get(int id)
{
var file = _fileRepository.Get(id);
// not sure what to do here (...pseudo code...)
if (!CheckClaim("UserID", file.UserID))
{
throw new HttpError(HttpStatusCode.Forbidden);
}
return file;
}
}
Forse usando Claim
s non è lo strumento giusto per il lavoro, ma spero che questo illustra il problema.
Come collegare i controller per garantire che l'utente attualmente connesso abbia accesso a compiere azioni specifiche e, in particolare, determinate risorse?
in questo caso, penso che l'affermazione sarebbe il 'UserID'. – Matthew
Sì, questo ha senso. È inoltre possibile avere attestazioni per rappresentare i ruoli utente. Quindi si associa un ruolo a un insieme di permessi. Ad esempio, Admin => Aggiungi file, Rimuovi file, ecc. –