CRMGestion des autorisations
La gestion des autorisations consiste à gérer les opérations des utilisateurs sur les ressources. Les autorisations (également appelées ressources) de ce système CRM sont implémentées en fonction des autorisations d'opération de rôle, c'est-à-dire RBAC (Role-Based Access Control, contrôle d'accès basé sur les rôles), ce qui signifie que les utilisateurs sont associés à rôles et autorisations. En termes simples, un utilisateur a plusieurs rôles et chaque rôle dispose de plusieurs autorisations. De cette manière, un modèle d'autorisation de type « permission de rôle d'utilisateur » est construit. Dans ce modèle, il existe des relations plusieurs à plusieurs entre les utilisateurs et les rôles, ainsi qu'entre les rôles et les autorisations. Afin de réaliser la relation plusieurs à plusieurs entre les tables, une relation plusieurs à plusieurs doit être divisée en deux. relation à plusieurs. Par conséquent, des tables intermédiaires, des tables de rôles d'utilisateur et des tables d'autorisations de rôle sont introduites.
implique un total de cinq tables :
Trois tables principales
a) Table des utilisateurs (t_user),
b) Table des rôles (t_role),
c ) Table de ressources (t_module),
2. Deux tables intermédiaires
a) Table de rôles utilisateur (t_user_role),
b) Table de rôles-ressources (t_permission),
Accorder des autorisations à Rôles : utilisez ztree pour construire l'arborescence des autorisations
a) Accorder des autorisations
1. Liez d'abord ce module
2. Liez le module parent 🎜> Puisque elle dans In ining in in 2. Supprimer les sous-modules; est, associez-le)
a) Utilisez le plug-in jQuery zTree pour créer une structure arborescente de ressources, le contenu de l'arborescence est
données dans table t_module
b) Utilisez la souris pour cliquer sur la sélection case dans zTree pour faire fonctionner la
table t_permission (table de ressources de rôle)
pour implémenter le rôle Accorder des autorisations
Attribuer des rôles aux utilisateurs Accorder des rôles aux utilisateurs : utilisez la liste déroulante multi-sélection a). Ajouter un compte : accédez directement à t_user_role insérer un enregistrement
b) . Modifier le compte : supprimez d'abord, puis ajoutez.
Lors de la création d'un utilisateur ou de la modification des informations utilisateur, vous pouvez utiliser la zone de sélection multiple de la liste déroulante pour attribuer des opérations de rôle à l'utilisateur t_user_role (table des rôles utilisateur)
Idée :
À partir de la table t_permission Obtenez la valeur d'autorisation (acl_value) de la page et comparez-la avec la valeur transmise par la page ou avec la valeur d'autorisation spécifiée dans l'annotation :
1. La page passe Request.getParameter("permission"); Interrogez la liste d'autorisations trouvée dans la base de données en fonction de l'ID utilisateur contient
2. Clarifiez la valeur d'autorisation du module via des annotations : @requirePermission(permission="1010";
Obtenir les autorisations de l'utilisateur et les stocker dans la session. Ensuite, lorsque l'utilisateur exploite une ressource, la valeur d'autorisation d'une ressource sera soumise pour déterminer. si l'utilisateur dispose de cette autorisation
Utiliser Spring AOP pour intercepter l'authentification
1ère étape : activer le pilote d'annotation & lt; aop : aspectj-autoproxy /& gt; Étape 2 : Créer une classe proxy pour utiliser l'annotation @Compone @Component Trois étapes : Définir un point de départ @pointcut ("*Execution ('com.shsxt.controller.*.*(((((..)))")Public void PointCut () {}>
Étape 4 : Rédiger une amélioration : @Around(value="pointcut()") Autorisations utilisateur Annotation personnalisée
pour définir le point d'entrée : La méthode d'auto-interception des annotations d'autorisation peut améliorer les performances
3. Introduisez l'espace de nom AOP et activez le pilote d'annotation AOP
//@Pointcut("execution(* com.shsxt.controller.*.*(..))") @Pointcut("@annotation(com.shsxt.annotation.RequirePermissions)") public void pointcut() { }
List<String> permissions = permissionService.findRolePermissions(roleIds.substring(0, roleIds.lastIndexOf(","))); String permissioFront = request.getParameter("permission"); // 后台权限认证 AssertUtil.isTrue(!permissions.contains(permissioFront), "您无权操作此模块");
4. Activer les annotations sur les méthodes qui nécessitent une authentification par autorisation
List<String> permissions = permissionService.findRolePermissions(roleIds.substring(0, roleIds.lastIndexOf(","))); if (requirePermissions != null) { String permission = requirePermissions.permission(); // 后台权限认证 throw new UnAuthPermissionException(permission, "您无权操作此模块"); }
L'autorisation doit être cohérente avec la valeur act_value dans la table du module
Authentification frontale : jugement de fonction intégré de Freemarker
<!-- 启用@Aspect注解 --> <aop:aspectj-autoproxy />
Obtenir les autorisations de l'utilisateur Utilisez ensuite la syntaxe freemarker dans le freemarker frontal pour déterminer si l'utilisateur peut utiliser cette ressource (list?seq_contains('permission value '))
1.SQL :
2. Interroger l'autorisation dans la classe d'aspect AOP pour récupérer la liste des valeurs d'autorisation et la mettre dans la session
3. Jugement de la première page : Explication : Utilisez la fonction intégrée de freemarker sql_contains pour juger si la séquence contient des valeurs de paramètres. Contains renvoie true est similaire à la collection hashmap.contains(. valeur) en java;
SELECT DISTINCT p.acl_value FROM t_permission p -- LEFT JOIN t_role r ON r.id = ur.role_id left JOIN t_user_role ur on p.role_id = ur.role_id WHERE ur.user_id = 10;
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!