JeuWeb - Crée ton jeu par navigateur
Quel composant de contrôle 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 : Quel composant de contrôle d'accès ? (/showthread.php?tid=4841)



Quel composant de contrôle d'accès ? - Mycroft - 25-05-2010

Salut,

J'ai déjà intégré une méthode basique d'authentification grâce à Authlogic.

Je comptais utiliser "RESTful_acl" comme composant pour gérer les différents niveaux de contrôle d'accès. Je voudrais gérer trois niveaux : utilisateur, administrateur (tout pouvoir), et une série d'éditeur/modérateur pour différentes parties (forum, actualités, etc)

Donc pour revenir à RESTful_acl, ça a l'air assez simple à utiliser. L'inconvénient c'est que c'est vraiment orienté sur une application qui utilise que des actions "CRUD" ( index, show, create, delete, update..)

Je pense qu'un certain nombre de controllers seront restreint à ces actions, mais j'aurais probablement d'autre type d'actions du style "move","pickup","drop", "equip", "sell", "talk" etc.

Mon dilemne, c'est :
Soit d'utiliser RESTful_acl qui a l'air sympa, mais de l'étendre. (L'inconvénient c'est que je devrais peut être faire des merge de code à chaque mise à jour de la gem).

Typiquement ça peut être fait ici :

Code :
case @action
        when "index" then object_class.is_indexable_by(@user, @parent)
        when "new", "create" then object_class.is_creatable_by(@user, @parent)
        when "show" then @object.is_readable_by(@user, @parent)
        when "edit", "update" then @object.is_updatable_by(@user, @parent)
        when "destroy" then @object.is_deletable_by(@user, @parent)
        else check_non_restful_route
      end
    end
Et je rajoute toutes les actions tordues qui germeront dans mon esprit.

Soit de trouver un autre composant de gestion d'ACL plus flexible.
J'en ai vu plusieurs mais : ils ont pas l'air trop maintenu...

(Éventuellement je pourrais développer mon propre système mais je vois moyennement l'intérêt. Je vais "perdre du temps" alors que je pourrais faire de la réutilisation de code mieux testé/validé)

Si vous avez des conseils sur des bons ACL je vous écoute.

(Sinon j'attends que Sephi chan fasse une partie ACL à son tuto et je ferais pareil Smile )

Edit : Eventuellement Acl9 a l'air maintenu et assez flexible.

Edit2 :

J'ai trouvé un message de blog de 2008 qui compare les différents systèmes. C'est pas mal pour se faire une idée.

http://steffenbartsch.com/blog/2008/08/rails-authorization-plugins/


RE: Quel composant de contrôle d'accès ? - Sephi-Chan - 25-05-2010

Hello, j'ai jamais essayé RESTful_acl. Ça n'a pas grand intérêt si ça son support de base se limite aux actions de REST, car REST ne sert qu'à réaliser des API, c'est loin d'être un besoin quotidien. Après, c'est vrai que ça aide à être cohérent dans l'URL des pages (pour un formulaire d'inscription, l'URL /users/new convient bien).

J'avais utilisé un peu Acl9, il était sympa.

Mais en pratique (et j'ai été le premier étonné), j'utilise très peu les Acl. La sécurisation des accès se fait naturellement la plupart du temps. Par exemple si quelqu'un veut modifier un message sur un forum, le contrôleur qui affiche le formulaire va avoir un code comme :


def edit
@message = current_user.messages.find(params[:id])
# La requête SQL sera de la forme : SELECT * FROM messages WHERE user_id = {{current_user.id}} AND id = {{params[:id]}}
end

def update
@message = current_user.messages.find(params[:id])

if @message.update_attributes(params[:message])
redirect_to @message.thread
else
render 'edit'
end
end

Donc en fait, c'est sécurisé d'office (du moins pour l'appartenance) : l'utilisateur ne pourra modifier que ces messages.


Sephi-Chan


RE: Quel composant de contrôle d'accès ? - Mycroft - 25-05-2010

Oui mais ça signifie aussi que tu as un deuxième contrôleur pour administrer le forum/ éditer tous les messages.

Et dans ce deuxième contrôleur tu as de toute façon une forme de contrôle d'accès même très basique du style "if current_user.isAdmin? ".

Je pense qu'on peut pas vraiment se passer de ce genre de fonctionnalités.

Le problème c'est plutôt de le choisir ou de le dimensionner en fonction de ses besoins.

Je pense que je vais m'orienter vers un truc assez simpliste adapté à mes besoins avec un granularité au niveau des contrôleurs en créant des contrôleurs d'admin dans un namespace "admin" à part.


RE: Quel composant de contrôle d'accès ? - Sephi-Chan - 25-05-2010

Oui, je suis aussi adepte de l'approche d'un espace d'administration. Mais ça dépend pas mal des cas, parfois c'est pratique d'afficher de petit contrôles d'administration (et effectivement, il suffit de quelque chose de peu coûteux, comme le test d'une colonne is_admin?). Smile


Sephi-Chan