如何在CanCan中禁止用户操作

时间:2012-06-21 21:02:44

标签: ruby-on-rails ruby-on-rails-3 cancan

在我的ability.rb文件中,如何设置它以便只有已定义的用户可以执行操作,否则(未定义/未登录的用户)无法执行任何操作?

示例:

def initialize(user)
    user ||= User.new #not logged in user
    if user.admin_user?
        can :manage, :all
    else
        #can't do anything. Cannot view, edit, or update.
    end
end

谢谢!

2 个答案:

答案 0 :(得分:1)

我从未真正使用过CanCan,但我查看了文档,我认为您不需要明确定义用户不能做什么。

你应该只能在你的控制器中做这样的事情:

if cannot? :destroy, @project 
  # redirect the user or do something else to disallow access
end
如果未为用户分配具有任何定义的角色的角色,则

cannot?应返回true。相反,can?将返回false。

答案 1 :(得分:0)

您可以在初始化函数中尝试一个简单的条件集:

# app/models/ability.rb
def initialize(user)
  if user && user.admin_user?
    # Abilities for registered admin users
    can :manage, :all
  elsif user
    # Abilities for registered users
    can :read, :all
  else
    # Abilities for no user
  end
end

调用initialize时,user可能(取决于您的身份验证解决方案)为nil未登录的用户,这将触发最后一个分支。