ユーザー認証とアクセス許可にdeviseとcancanを使用しています。新規ユーザーのみにデフォルトの権限セットを作成する必要があります。デバイスコードを台無しにしたくないので、ユーザーモデルに含める必要があります。それを行う最善の方法は何ですか。
これが私のモデルで試したことです:
before_create :setup_permissions
def setup_permissions
permissions = []
@roles = Role.where('subject_id is null and permissions = ?', 'Read')
@roles.each do |role|
permissions << {:role_id => role.id}
end
self.role_assignments_attributes = permissions
end
しかし、上記のコードではエラーが発生します。
興味深いことに、コンソールで 1 行ずつアクセス許可を作成するコードを実行しました。以下に示すように、正しい配列が生成されます。
permissions = [{:role_id=>15}, {:role_id=>17}, {:role_id=>19}, {:role_id=>21}, {:role_id=>23}, {:role_id=>25}, {:role_id=>27}]
以下に示すように、アクセス許可配列をビルドする代わりに、モデルに直接貼り付けると機能します。
def setup_permissions
permissions = [{:role_id=>15}, {:role_id=>17}, {:role_id=>19}, {:role_id=>21}, {:role_id=>23}, {:role_id=>25}, {:role_id=>27}]
@roles = Role.where('subject_id is null and permissions = ?', 'Read')
@roles.each do |role|
permissions << {:role_id => role.id}
end
self.role_assignments_attributes = permissions
end