我成功地使用Devise和CanCan创建了登录系统,我有3种类型的用户。管理员,内部和全球用户。我创建了控制器和索引操作:Admin,Cpanel,Report和State,并且我想限制某些用户对此控制器的访问。设置CanCan ability.rs模型
管理员用户应该有privilegies访问:报告(全部),国家(读),管理(全部)
全球用户应该有privilegies访问:报告(只读),国家(读),交友(全部)
内部用户应该有privilegies访问:报告(全部),国家(读)
我试着用下面的代码来做到这一点ability.rs:
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
if user.role? :admin
can :manage, [Report, Admin]
can :read, State
elsif user.role? :global_user
can :read, [Report, State]
can :manage, Cpanel
elsif user.role? :internal_user
can :manage, Report
can :read, State
end
end
end
这时我只有在这个控制器的索引动作,当我登录到内部用户的应用程序,我可以访问/ admin作为例子,这不是我想要的行为。我想限制对所有控制器的访问,而不是在capability.rb类中列出的控制器。
为什么我会得到未定义的方法“角色?”为零:NilClass? – dormitkon 2011-03-02 12:41:57
而我在用户模型方法角色? – dormitkon 2011-03-02 12:53:30
这意味着你正在调用角色?方法在零。如果你使用了我的代码,那么你的@current_user对象是零。您需要确保设置。看到我上面的编辑我如何做到这一点 – Tony 2011-03-02 16:30:56