私は、次のをお勧めします:
開発者は、ユーザーオブジェクトです。スキーマ内のis_developerブール値を持つユーザーと開発者を区別します。これにより、ユーザー/開発者を(switch文なしで)統合したままにすることが容易になります。
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
また、多態性の関連付けとしてUser/Developerの作業を行うこともできます。例えば。
class Role < ActiveRecord::Base
belongs_to :entity, :polymorphic => true #with entity_id/entity_type in your schema
end
このアプローチの欠点は、セマンティックゲインがほとんどないかゼロになるようにコードを複雑にすることです。
私は本当にあなたがデフォルトの許可で意味するものを理解していませんが、データベースではなく論理的な問題であるようです。誰もデフォルトの許可を持っていますか? * after_create *に追加することもできますし、ロジックを書くときにはそれを真(またはブール値のフラグで制御)します。次のコードでは、各ユーザーのアクセス許可が作成された後にデフォルトでtrueになります(既存のユーザーの場合は、手書きタスクでアクセス許可を追加できます)。
class User < ActiveRecord::Base
after_create :add_default_permission
def add_default_permission
Permission.default_permissions.each do |permission|
self.app_permissions.create(:permission_id => permission.id)
end
end
end
default_permissionsについては、permissionsテーブルに* is_default * booleanを指定することをお勧めします。こうすることで、複数の既定のアクセス許可を引き継ぐことができます(または既定のアクセス許可を後で削除することもできます)。既定のアクセス許可は、アクセス許可がなので、オブジェクトモデルを区別する必要はありません。私。最後に
class Permission < ActiveRecord::Base
named_scope :default_permissions, :conditions => { :is_default => true }
end
、ユーザーがアプリをインストールする場合、すなわち
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
、完全にあなたのActiveRecordアソシエーションのすべてを綴るてください:多型については、以下のEDITED
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
・ホープこれはあなたの問題を解決するのに役立ち、追加の情報が必要な場合は私に知らせてください。
デフォルトのアクセス許可では、アプリケーションをインストールするときにユーザーに既定のアクセス許可が与えられます。アプリケーションをインストールした後、特定のアプリケーションの権限を変更できます。 – Immo
許可はアプリケーション/ユーザー向けですか?例えば。 Bobは許可を得てPlaygroundをインストールし、その後Janeは許可を得てPlaygroundをインストールします。 'Build a new seesaw'? – ghayes
いいえ。アプリケーションは、ディスクへの書き込み、ディスクからの読み取り、ディスクからの削除などを行うことができます。ディスクからの読み取り= true、ディスクからの削除= falseので、新しいアプリケーションをインストールするたびに、デフォルトのアクセス許可で受け入れなかったアクセス権のみを受け入れる必要があります。 – Immo