IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Gestion des utilisateurs avec les bits


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de cobos
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2014
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 111
    Par défaut Gestion des utilisateurs avec les bits
    Bonsoir,
    Je dois faire un système de droits d'accès grâce aux opérateurs binaires, mais le soucis est que j'ai plus de 32 droits à gérer du coup ça devient compliqué.
    avez vous une idée de comment je peux faire ça autrement ?

    voici un peu ce que j'ai fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     define ('AJOUT_ARTICLE', 0x01); 
                define ('SUPPRIMER_ARTICLE', 0x02); 
                define ('LISTER_ARTICLE', 0x04);
                define ('MODIFIER_ARTICLE', 0x08);
                //catégorie
                define ('AJOUT_CATEGORIE', 0x10); 
                define ('SUPPRIMER_CATEGORIE', 0x20); 
                define ('LISTER_CATEGORIE', 0x40);
                define ('MODIFIER_CATEGORIE', 0x80);
                --------------------------------------------
                ---------------------------------------------
               //privilège
                define ('AJOUT_PRIVILEGE', 0x1000000); 
                define ('SUPPRIMER_PRIVILEGE', 0x2000000); 
                define ('LISTER_PRIVILEGE', 0x4000000);
                define ('MODIFIER_PRIVILEGE', 0x8000000);

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Le masquage de bit c'est très bien quand tu as peu de permission. Dans ton cas , je pense qu'il faut envisager de passer sur un système un peu plus complexe de role et permission gérer par un base de données.
    Une table role, une table permission et pour chacune une table qui fait le lien avec les utilisateurs.

    Ca te permet une infinité de combinaison sans te prendre la tête sur la taille de ton entier.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Je redécouvre le système du masquage de bits, c'est sympa

    Un petit rappel sur les roles et les permissions : un utilisateur a un ou plusieurs rôles, un rôle a une ou plusieurs permissions.
    En reprenant ton exemple, on pourrait par exemple faire quelque chose comme :
    Rôle : admin_article ; Permissions : ajout_article, supprimer_article, modifier_article
    Rôle : admin_cat ; Permissions :ajout_cat, supprimer_cat, modifier_cat
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  4. #4
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    Le plus simple c'est de partir du principe que ce qui n'est pas explicitement autorisé est interdit.
    L'approche la plus souple c'est d'utiliser les rôles comme modèle de base et d'affiner selon chaque utilisateur.
    Quelque chose dans ce genre :
    t_grant_role(#id_grant_role, role)
    t_grant_role_profile(#id_grant_role_profile, id_grant_role, id_action)
    t_grant_user_profile(#id_grant_user_profile, id_user, id_action)

    Dans ton application tu choisis un rôle pour un utilisateur, tu enregistres ce choix dans la fiche utilisateur, tu recopies les pouvoirs du rôle dans la table des autorisations et toutes les actions qui ne sont pas présentes dans cette table sont tout simplement interdites.

  5. #5
    Membre confirmé Avatar de cobos
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2014
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 111
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    Salut,

    Le plus simple c'est de partir du principe que ce qui n'est pas explicitement autorisé est interdit.
    L'approche la plus souple c'est d'utiliser les rôles comme modèle de base et d'affiner selon chaque utilisateur.
    Quelque chose dans ce genre :
    t_grant_role(#id_grant_role, role)
    t_grant_role_profile(#id_grant_role_profile, id_grant_role, id_action)
    t_grant_user_profile(#id_grant_user_profile, id_user, id_action)

    Dans ton application tu choisis un rôle pour un utilisateur, tu enregistres ce choix dans la fiche utilisateur, tu recopies les pouvoirs du rôle dans la table des autorisations et toutes les actions qui ne sont pas présentes dans cette table sont tout simplement interdites.
    J'avoue que je comprends pas bien. Dans mon système je veux laisser l'utilisateur final (le client) lui même définir les accès pour ses utilisateurs. j'ai donc conçu une interface où il y a toutes les actions (boutons et liens) sous forme de case à cocher. Donc quand il crée un rôle, il coche les boutons (ajouter,supprimer,modifier...) et liens auxquels l'utilisateur ayant ce rôle pourra avoir accès.

  6. #6
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par cobos Voir le message
    Donc quand il crée un rôle, il coche les boutons (ajouter,supprimer,modifier...) et liens auxquels l'utilisateur ayant ce rôle pourra avoir accès.
    Non, l'utilisateur créé un profil d'utilisateur, le rôle est le modèle de profil proposé par l'application.
    Quand tu as par exemple 200 actions possibles, tu t'imagines devoir cocher 200 cases pour définir les autorisations pour chaque nouveau profil ?
    Donc en premier lieu tu définies des rôles : Administrateur, Manager, Exploitation... auxquels tu rattaches des droits. Cela va te fournir une base de personnalisation, ensuite pour chaque nouvel utilisateur, tu sélectionnes le profil de base (le modèle), cela devra te cocher automatiquement les droits définis qui restent ensuite personnalisables selon tes besoins.

  7. #7
    Membre confirmé Avatar de cobos
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2014
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 111
    Par défaut
    Citation Envoyé par grunk Voir le message
    Une table role, une table permission et pour chacune une table qui fait le lien avec les utilisateurs.
    Merci pour ta réponse, mais je comprend pas bien quand tu dis et pour chacune une table qui fait le lien avec les utilisateurs.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Gestion des transactions avec les composants DOA
    Par lper dans le forum Bases de données
    Réponses: 2
    Dernier message: 01/12/2008, 16h06
  2. Gestion des piles avec les classe
    Par souad21 dans le forum C++
    Réponses: 1
    Dernier message: 24/10/2007, 06h10
  3. Gestion des fenêtres avec les menus
    Par Death83 dans le forum C++Builder
    Réponses: 23
    Dernier message: 15/12/2006, 10h22
  4. [vb.net]Gestion des exceptions avec les web services
    Par mvr dans le forum Windows Forms
    Réponses: 2
    Dernier message: 05/12/2005, 22h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo