10-08-2010, 12:03 PM
Les solutions de sérialisation maison, ça sent un peu le pâté, d'autant qu'ActiveRecord gère ça très bien avec la méthode serialize..
Ainsi, il te suffit de définir ton modèle ainsi :
Ta table users devra avoir une colonne roles doit être de type text. Cela te créera une panoplie de méthodes pour manipuler un tableau Ruby dont la sérialisation (en YAML) et la désérialisation seront automatiquement effectuées sera automatiquement effectuées à la sauvegardes et à la récupération des objets.
C'est tout de même plus simple quand c'est géré pour toi, non ?
Pour tes rôles, tu peux utiliser Declarative Authorization, on utilise ça au boulot sur une application et c'est vraiment sympa et assez flexible. En plus, il y a un tutoriel vidéo : Railscasts 188 - Declarative Authorization (c'est du Rails 2 mais c'est très simple à adapter).
Sephi-Chan
Ainsi, il te suffit de définir ton modèle ainsi :
class User < ActiveRecord::Base
serialize :roles
# Tout le reste de ton modèle…
end
Ta table users devra avoir une colonne roles doit être de type text. Cela te créera une panoplie de méthodes pour manipuler un tableau Ruby dont la sérialisation (en YAML) et la désérialisation seront automatiquement effectuées sera automatiquement effectuées à la sauvegardes et à la récupération des objets.
@user = User.find(1)
@user.roles << 'administrator' # Maintenant roles contient le tableau [ 'administrator' ]
if @user.roles.include?('writer') # Mais non ! Le tableau ne contient pas 'writer' !
puts "You are a writer!"
end
@user.save
# Dans la base de données, la colonne roles contient maintenant :
# ---
# - administrator
C'est tout de même plus simple quand c'est géré pour toi, non ?
Pour tes rôles, tu peux utiliser Declarative Authorization, on utilise ça au boulot sur une application et c'est vraiment sympa et assez flexible. En plus, il y a un tutoriel vidéo : Railscasts 188 - Declarative Authorization (c'est du Rails 2 mais c'est très simple à adapter).
Sephi-Chan