CanCan 入门

CanCan 是 Ruby on Rails 的流行授权库,它限制用户访问特定资源。最新的宝石(CanCanCan)是死亡项目 CanCan 的延续。

权限在 Ability 类中定义,可以从控制器,视图,帮助程序或代码中的任何其他位置使用。

要向应用添加授权支持,请将 CanCanCan gem 添加到 Gemfile

gem 'cancancan'

然后定义能力类:

# app/models/ability.rb
class Ability
  include CanCan::Ability

  def initialize(user)
  end
end

然后使用 load_and_authorize_resource 检查授权,将授权模型加载到控制器中:

class ArticlesController < ApplicationController
  load_and_authorize_resource

  def show
    # @article is already loaded and authorized
  end
end

authorize! 检查授权或提出异常

def show
  @article = Article.find(params[:id])
  authorize! :read, @article
end

can? 用于检查对象是否被授权针对控制器,视图或帮助器中的任何位置的特定操作

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

注意: 这假定签名用户由 current_user 方法提供。