我有一个用户可以在我的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
我有其他条件,但我想向您展示我的方法的一个例子 它看起来不那么俗气......任何其他建议
答案 0 :(得分:1)
为了创建角色,我喜欢使用由Ryan Bates创建的gem CanCan。他展示了如何使用它在该截屏视频上进行身份验证:http://railscasts.com/episodes/192-authorization-with-cancan
但是,如果您要按照惯例进行操作,我过去只需在我的用户模型上添加一个新方法来验证这一点,以便每当它检查用户是否具有我想要的角色时
e.g
class User < ActiveRecord::Base
def has_hole? role
self.roles.where(name: role).size != 0
end
end
答案 1 :(得分: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