rails gem开发实录之cancan的使用

本文介绍Rails框架下的权限管理gem——Cancan。它提供了强大的权限控制能力,能够灵活地将权限定义于代码或数据库中,并通过与awesome_nested_set插件结合实现复杂的用户权限管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

cancan是一款rails的权限认证gem,非常的强大和灵活。权限可以定义在代码中,也可以定义到数据库中。 与分级插件awesome_nested_set配合能完成非常复杂的用户权限控制。


  1.  安装
    config.gem "cancan"

    rails 3
    gem 'cancan'


  2. 生成验证文件
    rails2 需要自己增加
    app/model/ability.rb
    class Ability
      include CanCan::Ability
    
      def initialize(user)
      end
    end

    rails3
    rails g cancan:ability

    权限文件的定义方法
    can [:manage,   :read, :update, :destory ], 资源[User ,   user ]
    cannot  。。。

    定义 model的属性
    can :read, Project, :active => true, :user_id => user.id
    定义nested嵌套属性
    can :read, Project, :category => { :visible => true }
    block定义属性
    can :update, Project do |project|
      project.priority < 3
    end
    重写can 方法?!
    can do |action, subject_class, subject|
      # ...
    end






  3. controller 引用
    有三种
    其一:能认证一个controller中的所有action
    load_and_authorize_resource  :users,  :photo
    user = User.accessible_by(current_ability).find(:first, :conditions => ["username = ?", @username])
    
    

    其二:认证一个action
    def show
      @article = Article.find(params[:id])
       authorize! :read, @article
    end

    其三:认证整个项目
    class ApplicationController < ActionController::Base
      check_authorization
    end



  4. view引用
    <% if can? :update, @article %>
      <%= link_to "Edit", edit_article_path(@article) %>
    <% end %>




  5. 其他
    无权限访问某资源时,会抛出 异常
    class ApplicationController < ActionController::Base
      rescue_from CanCan::AccessDenied do |exception|
        redirect_to root_url, :alert => exception.message
      end
    end




资料:
cancan homepage:  https://github.com/ryanb/cancan
awesome_nested_set home page:  https://github.com/collectiveidea/awesome_nested_set
devise, cancan , bootstrap rails3.2 整合:  https://github.com/RailsApps/rails3-bootstrap-devise-cancan




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值