0

ユーザーには、スーパー ユーザー > 管理者 > その他のユーザーという階層化されたロール モデルがあります。(私はこれを実装するために cancan を使用しています) スーパー ユーザーは他のすべてのユーザーのプロファイルにアクセスできる必要がありますが、管理者は自分が作成したユーザーのユーザー プロファイルのみにアクセスできる必要があります。投稿やコメントのように、作成したユーザーの所有権を割り当てることはできますか? 現在、私の能力ファイルは次のようになっています。

class Ability
include CanCan::Ability

def initialize(user)
  user ||= User.new
  if user.status == "Super User"  
    can :manage, :all
  elsif user.status == "Admin"
    can :create, User           
    can :show, User, :id => user.id
    can :update, User, :id => user.id

end
4

1 に答える 1

1

もちろん、データベースで追跡する必要があります。たとえば、ユーザー データベースに「creator_id」フィールドを追加すると、作成ユーザー (管理者またはスーパー ユーザー) の ID が格納されます。

User モデルでは、次のようなことができます。

belongs_to :creator, class_name: 'User'

そして、あなたの能力で:

class Ability
include CanCan::Ability

def initialize(user)
  user ||= User.new
  if user.status == "Super User"  
    can :manage, :all
  elsif user.status == "Admin"
    can :create, User           
    can [:show, :update], User, :id => user.id
    can [:show, :update], User, :creator_id => user.id
  end
end

管理者が自分自身を表示または更新できるように、表示/更新行を結合しました。次に、管理者が現在のユーザーによって作成されたユーザーを表示/更新できるように、別の缶行を追加しました。

編集:

ユーザーを作成している場所はどこでもcurrent_user、管理者になると思いますよね?次に、ユーザーのcreatorプロパティを設定できます。

user = User.new(name: 'Foo Bar') # or however you are doing it
user.creator = current_user
user.save
于 2013-05-28T20:56:43.560 に答える