ycancan 无 它是原始 CanCan gem 的延续版本
看起来您可能想了解 CanCanCan(一个 Ruby on Rails 的授权库),性能更好



您具体想了解 CanCanCan 的哪个方面呢?或者您提到的 ycancan是指其他工具吗?
CanCanCan 是什么?
CanCanCan是 Ruby on Rails 中最流行的授权库之一,
主要特性
1. 能力定义(Ability 类)
# app/models/ability.rbclass Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # 访客用户
if user.admin?
can :manage, :all
else
can :read, Article
can :create, Article
can :update, Article, user_id: user.id
can :destroy, Article, user_id: user.id
end
end
end
2. 控制器授权
class ArticlesController < ApplicationControllerload_and_authorize_resource # 自动加载资源并检查权限
def index
# @articles 已自动根据权限过滤
end
end
3. 视图中的权限检查
<% if can? :edit, @article %><%= link_to "编辑", edit_article_path(@article) %>
<% end %>
基本使用方法
安装
# Gemfilegem 'cancancan'
定义权限规则
can:允许操作cannot:禁止操作:manage:所有操作:all:所有资源
常用操作
# 检查权限can?(:read, @article) # 能否读取?
cannot?(:delete, @user) # 能否删除?
# 授权检查
authorize! :edit, @article # 无权限会抛出异常
实际示例
# 复杂权限示例def initialize(user)
if user.role == 'editor'
can :manage, Article
can :publish, Article
cannot :delete, Article if Article.published?
elsif user.role == 'author'
can [:read, :create], Article
can [:update, :delete], Article, author_id: user.id
end
end
替代方案
如果您在寻找其他授权方案:
- Pundit:基于策略类的授权,但输入的是
ycancan。