je recommande ce qui suit:
Developer est un objet utilisateur. Distinguez les développeurs des utilisateurs avec un booléen is_developer dans votre schéma. Cela facilitera l'intégration des utilisateurs/développeurs (sans instructions de basculement). Vous pouvez ajouter une portée nommée pour trouver les développeurs de manière spécifique:
class User < ActiveRecord::Base
named_scope :regular_users, :conditions => { :is_developer => false }
named_scope :developers, :conditios => { :is_developer => true }
#you can then call User.regular_users or User.developers
end
Vous pouvez également utiliser User/Developer comme associations polymorphes. Par exemple. L'inconvénient de cette approche est qu'elle rendra votre code plus compliqué pour un gain sémantique faible ou nul.Je ne comprends pas vraiment ce que vous entendez par autorisation par défaut, mais cela semble être un problème de logique par opposition à une base de données. Est-ce que tout le monde a l'autorisation par défaut? Ensuite, vous pouvez l'ajouter sur * after_create *, ou lors de l'écriture de votre logique, supposer que c'est vrai (ou contrôlé par un drapeau booléen). Le code suivant crée une autorisation pour chaque utilisateur qui est true par défaut après leur création (pour les utilisateurs existants, vous pouvez ajouter les autorisations par tâche manuelle/rake). En ce qui concerne default_permissions, je suggère d'avoir un booléen * is_default * sur la table des permissions. De cette façon, vous pouvez avoir plusieurs autorisations par défaut (ou supprimer les autorisations par défaut plus tard). Par défaut, l'autorisation est une autorisation, il n'est pas nécessaire de différencier les modèles d'objet. C'est à dire.
class Permission < ActiveRecord::Base
named_scope :default_permissions, :conditions => { :is_default => true }
end
Enfin, assurez-vous de préciser pleinement toutes vos associations ActiveRecord, à savoir
class User < ActiveRecord::Base
has_many :apps
has_many :permissions, :through => :app_permissions, :as => :permissible #edited
end
class App < ActiveRecord::Base
belongs_to :app_permission
has_many :permissions, :through => :app_permissions, :as => :permissible #edited
end
class Permission < ActiveRecord::Base
belongs_to :app_permissions
belongs_to :permissible, :through => :app_permissions, :polymorphic => true #edited
end
class AppPermission < ActiveRecord::Base
belongs_to :permissible, :polymorphic => true #edited
belongs_to :app
end
Lorsqu'un utilisateur installe une application: ÉDITÉ CI-DESSOUS POUR POLYMORPHISME
Class User < ActiveRecord::Base
def get_required_app(app)
required_permissions = []
app.permissions.each do |p|
if self.permissions.find(:first, conditions => { :permission_id => p.id }).nil?
required_permissions.push p
end
end
required_permissions
end
def install_app(app)
req = required_permissions app
return req if req.count > 0
#add user app
end
end
Espoir cela vous aide à résoudre votre problème et faites-moi savoir si vous avez besoin d'informations supplémentaires.
Avec les autorisations par défaut, je veux dire qu'un utilisateur aura une autorisation qui sera par défaut lors de l'installation d'une application. Après l'installation de l'application, l'utilisateur peut modifier les autorisations pour l'application spécifique. – Immo
Donc, les autorisations sont pour l'application/l'utilisateur? Par exemple. Bob installe 'Playground' avec la permission 'Run on swings', et plus tard, Jane installe Playground avec la permission 'Construire une nouvelle balançoire'? – ghayes
Non. Une application peut écrire sur le disque, lire à partir du disque, supprimer du disque, etc. L'utilisateur peut avoir certaines conditions prédéfinies, par ex. Lecture à partir de disk = true, delete à partir de disk = false donc chaque fois qu'il installe une nouvelle application n'acceptera que les permissions qu'il n'accepte pas avec ses permissions par défaut. – Immo