开发人员指南| rdocs |屏幕截图1 |屏幕截图2
Cancancan是Ruby和Ruby在Rails上的授权库,它限制了允许给定用户访问的资源。
所有权限都可以在一个或多个能力文件中定义,并且不会在控制器,视图和数据库查询之间重复,从而使您的权限逻辑保持在一个地方以易于维护和测试。
它由两个主要部分组成:
允许您定义规则以访问不同对象的授权库,并提供助手来检查这些权限。
铁轨帮助者通过自动执行和检查模型权限并减少重复的代码来简化导轨控制器中的代码。
您想赞助坎坎坎人并在此处显示徽标吗?检查我们的赞助商页面。
前往我们的完整开发人员指南,了解如何在详细信息中使用坎坎坎。
将其添加到您的Gemfile:
gem 'cancancan'
并运行bundle install
命令。
用户权限在Ability
类中定义。
rails g cancan:ability
这里遵循定义用于阅读邮政模型的规则的示例。
class Ability
include CanCan :: Ability
def initialize ( user )
can :read , Post , public : true
return unless user . present? # additional permissions for logged in users (they can read their own posts)
can :read , Post , user : user
return unless user . admin? # additional permissions for administrators
can :read , Post
end
end
然后可以使用can?
而且cannot?
视图和控制器中的方法。
<% if can? :read, @post %>
<%= link_to "View", @post %>
<% end %>
与其他授权库相比,坎坎坎的关键功能之一是可以检索用户被授权访问的所有对象。下列:
@posts = Post . accessible_by ( current_ability )
将使用您的规则来确保用户仅检索可以读取的帖子列表。
authorize!
如果用户无法执行给定的操作,控制器中的方法将引起异常。
def show
@post = Post . find ( params [ :id ] )
authorize! :read , @post
end
为每个操作设置此操作都可能很乏味,因此提供了load_and_authorize_resource
方法,以自动授权Rentful样式资源控制器中的所有操作。它将使用之前的操作将资源加载到实例变量中,并为每个操作授权它。
class PostsController < ApplicationController
load_and_authorize_resource
def show
# @post is already loaded and authorized
end
def index
# @posts is already loaded with all posts the user is authorized to read
end
end
前往我们的完整开发人员指南,了解如何在详细信息中使用坎坎坎。
如果您对坎坎坎有任何疑问或疑问
如果找到错误,请在GitHub上添加问题或分叉该项目并发送拉动请求。
坎坎卡加使用评估来针对多个版本的导轨以及不同的模型适配器测试代码库。
首次开发时,您需要运行bundle install
,然后bundle exec appraisal install
,以安装不同的集合。
然后,您可以使用appraisal rake
运行所有评估文件(例如CI),也可以运行特定集合DB='sqlite' bundle exec appraisal activerecord_5.2.2 rake
。
如果您想在特定的文件或文件夹中运行一组特定的测试,则可以使用DB='sqlite' SPEC=path/to/file/or/folder bundle exec appraisal activerecord_5.2.2 rake
。
如果使用Rubymine,则可以通过配置RSPEC配置模板来运行RSPEC测试:
有关更多信息,请参见贡献。
感谢我们的赞助商和所有坎坎坎贡献者。请参阅ChangElog以获取完整列表。