JeuWeb - Crée ton jeu par navigateur
Droits d'accès - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Droits d'accès (/showthread.php?tid=4928)



Droits d'accès - Thib4s - 22-06-2010

Bonjour à tous,

Je sais que ces derniers temps je poste beaucoup mais bon apprendre un nouveau langage amène à se poser de nouvelles questions.
Celle du jour n'est pas vraiment "technique" mais plutôt "pratique".
J'ai déjà bien avancé dans a création de mon Broswer Game (4-5%, inscription, connexion, modules news complet, assistant de création de personnage et DLA implantée, avec rails on code quand même vachement vite Tongue) mais je me heurte à une question...

Actuellement les outils d'administration pour les différents modules sont opérationnel (gestion des news, etc...) mais la question que je me pose est "Quel est le meilleur moyen pour gérer les niveau d'accès". J'utilise pour l'instant un système avec un champ "level" dans ma table user et une fonction :
Code :
def restrict_access(level)
  if current_user.nil? || current_user.level < level
    #REDIRIGE LE JOUEUR
  end
end
Cette fonction marche plutôt bien parce qu'elle permet de gérer des droits hérité :
un visiteur = pas de level
un membre = level 1
un modérateur = level 6
un super modérateur = level 8
un admin = level 10
Donc si je veux restreindre une page comme l'inscription à tous les utilisateurs loggé je met un restrict_access(0).
Maintenant le problème de ce système est que je suis obligé de le placer dans chacune des méthodes de mes controllers :S

Sous CakePHP j'utilisait le moteur ACL qui était assez lourd à mettre en place avec une config un peu litigieuse.
Selon vous je dois aussi faire sa pour rails ou bien garder ma méthode qui est pas très "DRY"


RE: Droits d'accès - php_addict - 22-06-2010

je suis pas certain que ceci: http://www.jeuweb.org/showthread.php?tid=6382 puisse t'aider mais bon...


RE: Droits d'accès - Sephi-Chan - 22-06-2010

Je préfère utiliser des rôles. Une table de rôles et une table de liaison entre les rôles et les utilisateurs.


Sephi-Chan


RE: Droits d'accès - Ter Rowan - 22-06-2010

comme Sephi, plutôt deux tables, voire 3/4tables même, en plus de la table utilisateur

à deux tables :
table rôle
table rôle + utilisateur
(table utilisateur)

à 3/4 tables :
table rôle
table profil
table rôle + profil
(table utilisateur avec colonne profil) OU table utilisateur + profil


l'intérêt du rôle c'est de définir les possibilités d'actions unitaires (tel rôle peut faire telles choses)
il permet en plus par rapport au "level" de séparer les droits :

"un administrateur n'a pas le droit de réaliser certaines actions d'un modérateur et un modérateur n'a pas les droits de réaliser certaines actions d'un administrateur" ==> impossible avec les "level"

l'intérêt du profil c'est de simplifier l'attribution des rôles à un utilisateur

profil A possède rôles 1 3 5 6 7
profil B possède rôles 1 2 4 5 8

plus facile à gérer pour un individu. Et puis on peut élargir le profil à autre chose que des rôles mais aussi des périmètres, voire des conditions périmètre croisé rôle

exemple sur un forum "RP"

les chefs de guilde ont un rôle de modérateur sur le périmètre du sous forum de leur guilde, un rôle d'utilisateur sur le périmètre des sous forums publics et aucun droit sur le périmètre des sous forums des autres guildes


RE: Droits d'accès - Thib4s - 23-06-2010

Merci pour vos idées, je pense que je vais adopter Big Grin
Ma BDD devra ressembler à ça alors ?
- users (infos de connexion, has_one :user_profile, has_one :user_stat, has_many :user_awards, has_many :user_roles)
- user_profiles (les profils, belongs_to :user)
- user_stats (les statistiques pour les awards, belongs_to :user)
- user_awards (les récompenses, belongs_to :user)
- user_roles (belongs_to :user)
Sa fait pas bcp de liaisons ?


RE: Droits d'accès - Sephi-Chan - 23-06-2010

Ben non, ça fait rien d'avoir beaucoup de relations. Elles sont juste là pour aider ActiveRecord à écrire les requêtes SQL.


Sephi-Chan