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 Delphi Discussion :

Gérer les droits des utilisateurs


Sujet :

Langage Delphi

  1. #1
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Côte d'Or (Bourgogne)

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut Gérer les droits des utilisateurs
    J'aurais besoin pour diverses appli de gérer les droits des utilisateurs (droits à l'intérieur de l'appli, pas droits Windows), et je patauge lamentablement
    Qqn a-t-il des idées ?
    - Tutoriels au articles...
    - Extraits de code...
    - Composants tout faits...

    Roland
    Roland

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut
    Bonjour,

    De quoi auriez vous besoin ?

    Créer des droits, les stoker, les appliquer le sujet est vaste.

  3. #3
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Côte d'Or (Bourgogne)

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    Tout ça, tout ça

    Je prendrais bien les choses à l'envers en me posant d'abord la question : Quelle est la meilleure méthode pour appliquer des droits ?
    Mon idée actuelle :
    - définir toutes les actions sujettes à droit dans une ActionList, et pour chaque "User", activer ou désactiver l'Action.
    Les limitations que j'y vois :
    - rigidité dans le lancement d'une action (passage obligatoire par le Axtion.OnExecute, d'où pas de possibilité de passer un paramètre,
    - Comment être sûr que le (les) contrôle qui lance l'application sera visuellement inactivé, où invisible.

    Bref, c'est le début d'une réflexion, et ne voulant pas réinventer la roue, je me disais que si qqn avait déjà planché dessus...

    Roland
    Roland

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut
    Ce que je conseille:
    1° Etablir l'arborescense des doits nécessaire.
    2° en déduire les champs necessaire a votre composant de droit
    3° créer votre composant de droit et votre composant de list de droit
    4° Dans une unité séparer Creer une procedure Remplissant une liste de droit de tous les valeurs par défaut (nom, id, Droit (Oui/non) etc..)
    5° Creer dans une unité séparer la sauvegarde/Rapatriement des droits
    6° Creer votre visualisateur de droits pour une persone. en general c'est une procedure recopiant les droit dans un TTReeList ainsi que la fnction inverse pour recupérer les roits en fin de modification des droits.
    7° Ajouter la notion de droit a vos utilisateurs.


    1° pourquoi une arborescense
    C'est une structure beaucoup plus souple. Elle permet aux utilisateurs de mieux apréhender les droits sans avoir besoin de mode d'emploi.

    Exemple:

    Droit d'acces aux forms
    |- Droits d'acces au froms de consultation
    |- Droits d'aces au formes de Saisie
    |- Droit aux creation
    |- aux destruction
    |- A modifier les forme que je n'ai pas créer

    Si l'arborescence est logique c'est intuitif.
    Je deconseil plus de3 niveaux. Aux dela c'est le ......


    2° En deduire les structure nécessair
    En generale il faut :
    un identifiant unique (ID) pour retrouver le droit sans risque
    un nom
    un parent (arborescense)
    une valeur (Oui/non)

    3° créer votre composant de droit et votre composant de list de droit

    Le plus pratique est stoker vos droits dans une liste de droits et d'implementer l'ensemble droit/List de drpot en arborescense.

    Exemple:
    Créer un composant TDroitList
    Sont owner doit OBLIGATOIRMENT etre un TDroit ou être null

    Créer un composant TDroit
    Contenant les valeurs:
    Id
    Nom
    Valeur (Oui/non)
    1 List de droit.
    Attention a bien creer la list dans le constructor et a bien la detruire dans
    le destructor
    Sont owner doit OBLIGATOIRMENT etre un TListDroit ou être null

    Pour remplir la liste des droits.
    Creer la list avec le owner a list.
    MyList := TDroitList.Create(nil);

    Creer les droits et ajouter les dans la liste.
    Exemple:
    D1 := TDroit.Create(MyList); // Creer dans myList
    D1.Id := ... //
    D1.Nom := ... // Le mieuw est de fair en sorte que le create demande
    D1 .Value := ... // le nom, l'Id etc et ajout le droit dans la list
    MyList.Add(d1); // (Modifcation du constructor)

    D2 := TDroit.Create(d1.List); // le owner est la list de droit de D1
    Idem a D1 suf qye je rajoute D2 dans la liste des droit de D1

    L'arborescense et implicte, je n'ais pas a jouter le parent.

    D2.Owner = List des droits de D1
    ListDes droits de D1 = D1 par consequence D1 est le parent de D2

    4° Creer un remplissage des droits par defauts
    Sans commentaires

    5° sauvegarde et rapatriement des droits
    Sans commentaire

    6° Créer un visualisateur de droit
    en generale un TTReeList fait parfaitement l'afffaire.
    Il vous faut une procedure pour reporter un tDroitList dans un TTReeList,
    et inversement pour recupere les modifications

    7° Ajouter le notion de droits au utilisateurs
    suivant ce que vous voulez faire et ce que vous avez déja

    Ajout d'une liste de droit
    Ajout d'un groupe de list de droit (notion de groupe de droit( utilisateur, administrateur) chaque groupe correspondant a un TDroitList)
    autre ?

    Deconseillé
    Eviter plus de 3 niveaux dans les droits. Plus c'est le .... Personne ne retrouve ces petit dans ce cas. Et sutout pas les utilisateurs.

    si vous utliser des groupes de droits eviter les "Exotisme" comme d'ajouter ou de retirer des droits à un utilisateur en plus des droits hérité des groupes. On hérite surtout d'ennuis dans ces cas.
    Ou encore d'appliquer les droits à la volé ou suivant des horaire précis.
    C'es génial de devoir deconnecter quelqun qui travail sur un écran, par ce que le droit d'acces a cette écran vient juste de luis être retiré. Coup de geule et travail non finit assurer.

    Malheureusement je ne connais pas de composant prévus pour de telle gestions.

    Je n'ais pas pus vous répondre avant pour cause de coupure web.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 74
    Points : 63
    Points
    63
    Par défaut
    Ja'i utilise la propriete TAGE des composant contre la quelle je compare un niveau d'autaurisation de l'utilsateur.
    Voici un exemple utilisant un TActionList

    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
    17
    Procedure APPLY_AUTHORISATION(wAction : TActionList; Authorisation_level: Integer; All_disabled : Boolean);
    Var i : Integer;
    t : Text;
    Begin
        //Disable all the actions if all_disable = true
        if all_disabled = true
        then Authorisation_level := -1;
     
        For i := 0 to wAction.ActionCount-1
        do Begin
                if wAction.Actions[i].Tag > Authorisation_level
                then (wAction.Actions[i] as TAction).Enabled := False
                else (wAction.Actions[i] as TAction).Enabled := True;
     
     
        end;
    End;
    Je ne sais pas si cela vous a apporter de l'aide, mais en tout cas le conseil de JF que je trouve tres interessant et precis s'applique a cette procedure.

    Il est meme possible de faire une table de droit avec comme collone, NOM DE LA FENENTRE + NOM DU COMPOSANT + SA VALEUR TAG (Qui peut etre mis a jour en run time pour modifier son niveau d'acces)

    Kenavo

  6. #6
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Côte d'Or (Bourgogne)

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    J'y travaille lentement (entre d'autres tâches plus urgentes), et vos idées me sont utiles.
    Roland

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 22
    Points : 30
    Points
    30
    Par défaut
    Bonsoir,

    Perso, en parallèle avec les menus de mes applications, je détermine les droits (degrés) pour chaque utilisateur :
    0 -> accès interdit
    1 -> accès à titre consultatif (regarder, mais pas toucher...)
    2 -> consultation + impression (toujours pas toucher...)
    3 -> consultation + création
    4 -> consultation + création + modification
    5 -> consultation + création + modification + suppression
    9 -> toute autre opération spéciale réservée aux "super utilisateurs".

    Chaque utilisateur doit décliner son identité (+password) avant d'entrer dans le premier menu; ses droits (concaténés dans des champs de type string) sont lus dans le même temps.

    Par exemple; le champs UserMain contient les droits relatifs aux opérations sur les fichiers de base (signalétiques Clients, Salariés, Articles, Tarif,...); le champs UserFact contient les droits relatifs aux opérations de facturation (Ventes Comptoir, Factures, Notes de Crédit, Financiers,...).

    Dans le OnClick du Bouton Ajouter de la fenêtre Clients, je vérifie via une petite fonction générique si l'utilisateur a un droit >= à '3' pour la gestion des Fiches Clients; la même fonction générique sert à toutes les vérifications de droits (dans les paramètres, indiquer la position du string à vérifier et la valeur minimale pour pouvoir retourner True).

    J'espère que mes explications sont claires...

    Sybille.

Discussions similaires

  1. [1.x] Gérer les droits des utilisateurs ("dredentials")
    Par misswatson dans le forum Symfony
    Réponses: 9
    Dernier message: 11/06/2012, 15h34
  2. [PHP 5.3] Gérer les droits des utilisateurs : MySQL ou fichier XML
    Par ChriGoLioNaDor dans le forum Langage
    Réponses: 1
    Dernier message: 04/01/2010, 10h29
  3. Réponses: 13
    Dernier message: 02/12/2007, 11h39
  4. Réponses: 3
    Dernier message: 13/04/2006, 13h08

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