2017-07-21 1 views
-1

J'ai la structure de tableau ci-dessousRôle Hierarchy ... Kinda

Voici les tables.

Users: 
    + userid 
    + roleid /* Associate a Role to a User */ 

Roles: 
    + roleid 
    + rolename 

Permissions: 
    + permissionid 
    + permissionname 

RolePermissions: 
    + roleid 
    + permissionid /* Associate a Permission to a Role */ 

Espérant la structure est logique.

J'ai besoin des utilisateurs avec l'autorisation change_password pour pouvoir changer le mot de passe d'un utilisateur. Ce qui est simple, il suffit d'attribuer la permission à leur rôle.

La complication est que certains rôles peuvent seulement changer certains types de mots de passe des utilisateurs. Par exemple, un concierge peut changer un mot de passe Junior Janitors mais pas un mot de passe d'enseignant. Donc, je ne peux pas faire une vérification $user->can('edit_password'). Aussi ne veux pas un tas de if_this_role_is_editing_this_role chèques. Y a-t-il une très bonne façon pour vous d'aborder cela? Merci.

+0

Veuillez lire [Quels sujets puis-je poser à propos de] (http://stackoverflow.com/help/on-topic) et [Comment poser une bonne question] (http://stackoverflow.com/help/how -to-ask) et [la question parfaite] (http://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/) et comment créer un [Minimal, complet et vérifiable Exemple] (http://stackoverflow.com/help/mcve) et aussi [faire le tour] (http://stackoverflow.com/tour) ** SO n'est pas ** un service de codage gratuit ___Nous essayons de réparer votre code, nous n'écrivons pas votre code___ – RiggsFolly

+0

Hey @RiggsFolly ce n'est pas tellement une question de code, plus d'une question d'architecture. D'où le manque de code. Merci. –

+0

Ensuite, il est encore plus hors sujet alors – RiggsFolly

Répondre

0

Vous pouvez ajouter une colonne "power" à votre table utilisateur. De cette façon, vous pouvez bloquer une action si l'utilisateur effectue une action sur un utilisateur dont la puissance est supérieure ou égale à ses propres privilèges d'alimentation.