0

我有 5 个用户可以在我的 rails 站点中拥有的角色

- @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

我还有其他条件,但我想向您展示我的方法的一个例子它似乎不像 ruby​​like....任何其他建议

4

2 回答 2

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 回答
1

为了创建角色,我喜欢使用 Ryan Bates 创建的 gem 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 回答