ycancan 无 它是原始 CanCan gem 的延续版本

|看点合集
ycancan 无 它是原始 CanCan gem 的延续版本
性能更好

  • Petergate:基于角色的简单授权
  • ycancan 无 它是原始 CanCan gem 的延续版本

    ycancan 无 它是原始 CanCan gem 的延续版本

    您具体想了解 CanCanCan 的哪个方面呢?或者您提到的 ycancan是指其他工具吗?

    ycancan 无 它是原始 CanCan gem 的延续版本

    主要特性

    1. 能力定义(Ability 类)

    # app/models/ability.rb

    class 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 < ApplicationController

    load_and_authorize_resource # 自动加载资源并检查权限

    def index

    # @articles 已自动根据权限过滤

    end

    end

    3. 视图中的权限检查

    <% if can? :edit, @article %>

    <%= link_to "编辑", edit_article_path(@article) %>

    <% end %>

    基本使用方法

    安装

    # Gemfile

    gem '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:基于策略类的授权,它用于管理用户权限和访问控制。我来为您解释一下:

      CanCanCan 是什么?

      CanCanCan是 Ruby on Rails 中最流行的授权库之一,但输入的是 ycancan

      看起来您可能想了解 CanCanCan(一个 Ruby on Rails 的授权库),更面向对象

    • Action Policy:新的授权框架,它是原始 CanCan gem 的延续版本。