【问题标题】:Access CanCan's `can?` method from a model从模型中访问 CanCan 的 `can?` 方法
【发布时间】:2023-09-16 05:01:01
【问题描述】:

您可以通过这种方式使用can? 从视图或控制器中获取current_user 的权限:

  <% if can? :update, @article %>
    <%= link_to "Edit", edit_article_path(@article) %>
  <% end %>

如何使用以下语法从模型访问此功能:

user.can?(:update, @article)

【问题讨论】:

  • 好问题。很高兴你也得到了一个很好的答案!

标签: ruby-on-rails cancan


【解决方案1】:

在 github 上有一个 wiki 条目:https://github.com/ryanb/cancan/wiki/ability-for-other-users

您需要像这样更改您的用户模型:

class User < ActiveRecord::Base
  def ability
    @ability ||= Ability.new(self)
  end
  delegate :can?, :cannot?, :to => :ability
end

然后你可以像这样检查能力:

user.can?(:update,@article)

【讨论】: