0

在我的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

谢谢!

4

2 回答 2

1

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

你应该可以在你的控制器中做这样的事情:

if cannot? :destroy, @project 
  # redirect the user or do something else to disallow access
end

cannot?如果未为用户分配定义了任何能力的角色,则应返回 true。反之则can?返回假。

于 2012-06-21T21:10:17.400 回答
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用于未登录的用户,这将触发最后一个分支。

于 2012-06-21T21:17:50.697 回答