すでに存在するかなり大きなアプリに認証を追加しようとしていますが、詳細を少しわかりにくくする必要があります。
背景は次のとおりです。
私たちのアプリには、大まかに次のように階層的な数または役割があります。
BasicUser -> SuperUser -> Admin -> SuperAdmin
承認のために、各ユーザーモデルインスタンスには、上記に対応する属性「ロール」があります。
Backofficeの下に名前空間が設定されたRESTfulコントローラー「Users」があります。つまり、Backoffice::UsersControllerです。
class Backoffice::UsersController < ApplicationController
filter_access_to :all
#... RESTful actions + some others
end
だからここに問題があります:
ユーザーがユーザーを編集するためのアクセス許可をユーザーに付与できるようにする必要がありますが、ユーザーが現在よりも「小さい」役割を持っている場合に限ります。私はauthorization_rules.rbで以下を作成しました
authorization do
role :basic_user do
has_permission_on :backoffice_users, :to => :index
end
role :super_user do
includes :basic_user
has_permission_on :backoffice_users, :to => :edit do
if_attribute :role => is_in { %w(basic_user) }
end
end
role :admin do
includes :super_user
end
role :super_admin do
includes :admin
end
end
そして残念ながら、それは私が得た限りでは、ルールは適用されていないようです。
- ルールをコメントアウトすると、誰も編集できなくなります
- ルールを残しておけばみんな編集できます
if_attributeのバリエーションもいくつか試しました。
if_attribute :role => is { 'basic_user' }
if_attribute :role => 'basic_user'
そしてそれらは同じ効果を得る。誰か提案はありますか?