0

Railsサイトでユーザーが持つことができる5つの役割があります

- @roles.each do |role|
  %label.radio
    = radio_button_tag 'user[role_ids][]', role.id, @user.has_role?(role.name)
    = role.name

そして、私がやりたいことは、それらを無効にするか、完全に非表示にしたい current_user ロールに基づいています

私はこのように実装することを考えていましたが、あまりきれいに見えません....任意のアイデア

これを追加したかった

:disabled => disable_role?(current_user, role.name)

def disable_role?(current_user, role_name)
  case  
  when role_name == 'superadmin' and current_user.superadmin?
    return false 
  when role_name == 'admin' and (current_user.superadmin? || current_user.admin?)
    return false 
  when role_name == 'standard' and (current_user.superadmin? || current_user.admin?)
    return false 
  else  
    return true  
  end
end

他にも条件がありますが、私のアプローチの例をお見せしたいと思います。

4

2 に答える 2

1

役割を作成するために、ライアン・ベイツによって作成された宝石CanCanを使用するのが好きです。彼はそれを使用してそのスクリーンキャストで認証する方法を示しています:http://railscasts.com/episodes/192-authorization-with-cancan

しかし、最初からそれを行う場合は、ユーザーモデルに新しいメソッドを追加してそれを確認し、ユーザーが必要な役割を持っているかどうかをチェックするたびにそれを確認していました。

例えば

class User < ActiveRecord::Base
  def has_hole? role
    self.roles.where(name: role).size != 0
  end
end
于 2012-06-21T19:17:30.193 に答える
1

これは私がすることです:

class Role < ActiveRecord::Base
  ROLES_HIERARCHY = ['standard', 'admin', 'superadmin']

  def hierarchy(role_name)
    ROLES_HIERARCHY.index(role_name)
  end
  ...
end

- @roles.each do |role|
  %label.radio
    - if user.role.hierarchy > role.hierarchy
      = radio_button_tag 'user[role_ids][]', role.id, @user.has_role?(role.name) 
      = role.name
于 2012-06-21T23:43:43.027 に答える