Dans la documentation de ServiceStack, il est indiqué que la meilleure pratique est la suivante :
Normalement, ServiceStack appelle la méthode bool HasPermission(string permission) dans IAuthSession. Cette méthode vérifie si la liste List Permissions dans IAuthSession contient la permission requise. requise.
I remplir cette liste dans la méthode OnAuthenticated que vous avez surchargée dans la première partie de ce tutoriel.
Je suis en train d'intégrer un système existant, et j'ai mon BasicAuthProvider personnalisé qui fonctionne (hérité du BasicAuthProvider de base). L'authentification fonctionne parfaitement, maintenant je suis en train de construire la partie Autorisation. Je prévois d'utiliser la liste des permissions comme indiqué ci-dessus, mais j'ai besoin d'accéder aux informations de l'itinéraire pour déterminer si un utilisateur a accès à une ressource particulière. Je vois dans IAuthServiceBase un IRequestContext qui contient l'URL absolue, mais avant de l'analyser, je me suis dit qu'il devait y avoir un moyen d'accéder à la structure Route de ServiceStack pour me donner soit le nom de la classe du service demandé, soit le DTO auquel le service demandé est lié.
Voici la méthode OnAuthenticated de ma classe BasicAuthProvider :
public override void OnAuthenticated(IServiceBase authService, IAuthSession session, IOAuthTokens tokens, Dictionary<string, string> authInfo)
{
UserSession sess = (UserSession)session;
Model.User currentUser = UserRepository.GetUserByUsername(session.UserAuthName);
//Fill the IAuthSession with data which you want to retrieve in the app eg:
session.FirstName = currentUser.Person.FirstName;
session.LastName = currentUser.Person.LastName;
session.UserName = currentUser.User1;
sess.CurrentUser = currentUser;
//Important: You need to save the session!
authService.SaveSession(session, TimeSpan.FromDays(1));
}
Sous MVC, j'ai déjà utilisé certaines des données brutes de la requête pour obtenir le nom du contrôleur et de l'action, afin de déterminer l'autorisation des ressources, mais c'est le premier projet pour lequel j'utilise ServiceStack.