2

私はアクティブな管理者 (devise が含まれています) を使用しており、cancan を使用してロールを設定しました。私は注文モデルを持っています。いくつかの役割を設定しています。すべてのユーザーの注文インデックス全体を表示できる特定の役割が必要です。次に、特定のユーザーが他のユーザーの注文にアクセスせずに自分の注文のみを表示する必要があります。

私の注文コントローラーにはこれがあります...

    scope_to :current_user, :unless => proc{ current_admin_user.admin? } 

ドキュメントからその海峡を取りましたが、インデックス内のすべての注文ではなく、管理者の注文のみを表示しています。

これが私の能力モデルです

class Ability
include CanCan::Ability

def initialize(user)

    return if user.nil? #non logged in user can use this.

    if user.admin?
        can :manage, :all
    end

    if user.sales?
        can [:create, :update] [Order, Customer]
        can :read, :all
        cannot :destroy, :all
    end

    if user.production?
        can [:create, :update] [Order, Customer]
        can :read, :all
        cannot :destroy, :all
    end

    if user.art?
        cannot :create, :all
        can :read, :all
        can :update, Order
        cannot :destroy, :all
    end

    if user.broker?
        can [:index, :create, :edit, :update, :read], Order, :id => user.id
        can [:index, :create, :edit, :update, :read], Customer, :id => user.id
        cannot :destroy, :all
    end

    if user.shipping?
        cannot :create, :all
        can :read, :all
        can :update, Order
        cannot :destroy, :all
    end
 end
end
4

1 に答える 1

0

ルールを組み合わせているような気がします。

ファイルのさらに下にある能力ルールは、前のものを上書きします。-能力優先

デバッグ手順として、can :manage, :all.

ロールが相互に排他的である場合はelsif、個別の の代わりに使用する必要がありますif

于 2013-06-02T06:02:50.767 に答える