Le contrôle des autorisations basé sur les rôles n'est pas une bonne idée. Pour plus de détails, vous pouvez lire cet article : https://stormpath.com/blog/ne...
Mon projet utilise également shiro, qui n'est pas basé sur des rôles, mais sur des autorisations. En termes simples, c'est comme ça :
Chaque URL, menu et bouton est une ressource, et cette ressource a une autorisation correspondante
Le personnage a des autorisations (plusieurs)
La façon de juger si ce personnage peut obtenir des ressources est très simple. Il suffit de vérifier si ce personnage dispose de l'autorisation de ressource correspondante
Chaque requête back-end doit être vérifiée. Par exemple, une requête ajax pour obtenir une liste d'informations utilisateur vérifiera si la requête actuelle a l'autorisation de l'obtenir, d'obtenir le cookie demandé et d'établir une connexion avec la session sur. le serveur, si vous avez la permission, donnez-lui les données, sinon, renvoyez 403 ou similaire.
gérera généralement 资源URL de manière unifiée, fournira les autorisations de maintenance de la plate-forme de gestion et utilisera interceptor/filter pour vérifier si les utilisateurs disposent des autorisations correspondantes.
Pourquoi souhaitez-vous obtenir le rôle de la base de données ? Parce que les autorisations vont changer ? Dans ce cas, vous devez conserver les ressources, sinon il est impossible de mettre en œuvre des autorisations dynamiques.
Les autorisations
sont relativement simples, tout comme les rôles dans Tomcat Manager, il n'y a donc aucun problème à utiliser directement le codage en dur.
La chose la plus importante est de savoir à quoi devraient ressembler les exigences.
Tout d'abord, empêchez l'interface d'être appelée par d'autres. Cela peut être restreint à l'aide du mécanisme token S'il n'y a pas de jeton ou si le jeton est incorrect, 403 sera renvoyé.
Le reste est le problème des autorisations. Vous pouvez utiliser Shiro, Spring Security, etc. Vous pouvez utiliser la session pour distinguer les utilisateurs avec des autorisations différentes.
Le serveur génère un jeton et le renvoie au client. Le client apporte ce jeton à chaque requête, et le backend utilise des filtres pour le traiter uniformément
Si le problème 3 peut être résolu, alors le problème 2 n'a aucun sens
Je me souviens que Shiro peut contrôler les autorisations au niveau du code. Jetez un œil à la documentation.
Les autorisations ont plusieurs granularités, telles que les autorisations d'action, les autorisations de données et les autorisations dans différentes conditions d'état. Elles ne peuvent pas être contrôlées uniquement à un certain niveau. Le RBAC commun et l'ACL ne peuvent obtenir qu'un contrôle partiel, et ils doivent toujours être combinés. avec leur propre situation et leur application flexible, il n’existe pas de solution miracle qui puisse guérir toutes les maladies.
Vous pouvez envisager d'utiliser Spring Security ou Shiro pour la gestion des autorisations. Pour des opérations spécifiques, vous pouvez vérifier les informations en ligne
Le contrôle des autorisations basé sur les rôles n'est pas une bonne idée. Pour plus de détails, vous pouvez lire cet article : https://stormpath.com/blog/ne...
Mon projet utilise également shiro, qui n'est pas basé sur des rôles, mais sur des autorisations. En termes simples, c'est comme ça :
Chaque URL, menu et bouton est une ressource, et cette ressource a une autorisation correspondante
Le personnage a des autorisations (plusieurs)
La façon de juger si ce personnage peut obtenir des ressources est très simple. Il suffit de vérifier si ce personnage dispose de l'autorisation de ressource correspondante
Seule l'autorisation est codée en dur ici
Chaque requête back-end doit être vérifiée. Par exemple, une requête ajax pour obtenir une liste d'informations utilisateur vérifiera si la requête actuelle a l'autorisation de l'obtenir, d'obtenir le cookie demandé et d'établir une connexion avec la session sur. le serveur, si vous avez la permission, donnez-lui les données, sinon, renvoyez 403 ou similaire.
gérera généralement
资源URL
de manière unifiée, fournira les autorisations de maintenance de la plate-forme de gestion et utiliserainterceptor/filter
pour vérifier si les utilisateurs disposent des autorisations correspondantes.Pourquoi souhaitez-vous obtenir le rôle de la base de données ? Parce que les autorisations vont changer ? Dans ce cas, vous devez conserver les ressources, sinon il est impossible de mettre en œuvre des autorisations dynamiques.
sont relativement simples, tout comme les rôles dans
Tomcat Manager
, il n'y a donc aucun problème à utiliser directement le codage en dur.La chose la plus importante est de savoir à quoi devraient ressembler les exigences.
Je pense que vous avez deux questions.
Tout d'abord, empêchez l'interface d'être appelée par d'autres. Cela peut être restreint à l'aide du mécanisme
token
S'il n'y a pas de jeton ou si le jeton est incorrect, 403 sera renvoyé.Le reste est le problème des autorisations. Vous pouvez utiliser Shiro, Spring Security, etc. Vous pouvez utiliser la session pour distinguer les utilisateurs avec des autorisations différentes.
Le serveur génère un jeton et le renvoie au client. Le client apporte ce jeton à chaque requête, et le backend utilise des filtres pour le traiter uniformément
Si le problème 3 peut être résolu, alors le problème 2 n'a aucun sens
Je me souviens que Shiro peut contrôler les autorisations au niveau du code. Jetez un œil à la documentation.
Les autorisations ont plusieurs granularités, telles que les autorisations d'action, les autorisations de données et les autorisations dans différentes conditions d'état. Elles ne peuvent pas être contrôlées uniquement à un certain niveau. Le RBAC commun et l'ACL ne peuvent obtenir qu'un contrôle partiel, et ils doivent toujours être combinés. avec leur propre situation et leur application flexible, il n’existe pas de solution miracle qui puisse guérir toutes les maladies.
Vous pouvez envisager d'utiliser Spring Security ou Shiro pour la gestion des autorisations. Pour des opérations spécifiques, vous pouvez vérifier les informations en ligne
.