Mysql
 sql >> Base de données >  >> RDS >> Mysql

ColdFusion :options d'application basées sur le rôle ?

Vous avez raison, sécuriser une page et sécuriser des éléments est différent.

À mon avis et dans la pratique, je pense que lier n'importe quel code à un rôle ou à un utilisateur est en fait la mauvaise approche. Au lieu de cela, liez les autorisations aux éléments et aux pages, puis liez les rôles à ces autorisations. Et bien sûr, les utilisateurs se voient attribuer des rôles.

Il est important d'avoir les trois :

  1. Utilisateurs
  2. Rôles
  3. Autorisations <-- c'est ce qu'il vous manque

Les autorisations sont ce qui sécurise les éléments et les pages, pas les rôles ou les utilisateurs Votre code ne doit avoir aucune idée (parce qu'il n'en a pas besoin) de quels utilisateurs ou rôles il s'agit - juste des noms d'autorisations.

Lorsqu'un utilisateur se connecte, je saisis son(ses) rôle(s). Ensuite, je récupère toutes les autorisations attribuées à ces rôles (simplement une liste de valeurs de chaîne).

Par exemple, sur une page je pourrais avoir :

  • Ajouter un élément
  • Afficher l'élément
  • Supprimer l'élément

Lorsque je code cette page, je sécurise en fait chacun de ces éléments avec des chaînes d'autorisation nommées similaires ( addItem, viewItem, deleteItem).

<cfif listContainsNoCase( session.permissions, 'addItem' )>
    <!--- code to add item --->
</cfif>

(Remarque :Je recommande d'utiliser une balise ou une fonction personnalisée pour cela, mais à titre d'exemple, ce qui précède fonctionne bien).

Si vous le faites de cette façon, cela offre un maximum de flexibilité et d'abstraction. Si vous sécurisez des éléments basés sur des rôles, vous vous limitez :

  • L'ajout de nouveaux rôles nécessitera de nombreuses modifications de code !
  • La modification des autorisations entre les rôles nécessite de nombreuses modifications de code !

Si vous le faites comme mentionné ci-dessus, vous n'aurez jamais besoin de modifier votre code de sécurité dans la base de code, car l'autorisation "addItem" doit toujours être sur la logique "add item", n'est-ce pas ? :)

Maintenant, si vous avez besoin de créer un rôle de type "gestionnaire", qui a tous les rôles d'utilisateur et quelques droits d'administrateur sélectionnés, vous créez simplement ce rôle et lui attribuez les autorisations correctes (peut-être addItem et editItem, mais pas deleteItem) . Bam ! J'ai maintenant un rôle de gestionnaire à attribuer aux utilisateurs avec aucun changement de code !

Si j'avais saupoudré mon code avec le type de trucs "est l'utilisateur de ce rôle" - je devrais aller éditer mon code partout pour permettre mon nouveau rôle "manager" - beurk !

Ça a du sens ?

=)