rails 使用cancancan的一些心得
来源:互联网 发布:linux enca 编辑:程序博客网 时间:2024/06/05 08:01
1. 都知道cancancan对于权限管理而言是一个利器。能满足绝大多数的应用场景。
安装也很方便
gem 'cancancan', '~> 1.10'
然后 bundle
- 之后可以构造cancancan的相应文件了
rails g cancan:ability
这样就会在你的models下创建ability.rb文件。(app/models/ability.rb)
同时得确认在你的
app/controllers/application_controller.rb
下存在对于ablity对象的创建
def current_ability @current_ability ||= Ability.new(current_user)end
Ok,这样就可以在ability.rb里去定义一些权限操作了。
这些很简单,按照wiki上的来定义就可以了。
如下:
can :manage, Order, :order_type => "some"
类似于这些,这里主要是说下在controller中加入权限的一些问题。
在controller中使用
load_and_authorize_resource
会出现一些情况,例如:
ActiveModel::ForbiddenAttributesError
我们知道,这个是因为参数的问题,白名单。可是在加入之前是好好的,加入了权限的操作之后就出现了。经过查找,是因为params的名字引起的。需要改变为:
def #{model.underscore}_params #Order => order params.require(:model).permit({ :name, :address })end
这样就可以规避出现的这个问题。
另外一个就是controller的命名与model的命名不符合。
uninitialized constant ControllerNameClass
可以换种加载权限的方式
load_and_authorize_resource => authorize_resource :class => Model
可以发现,这样是可以指定权限的class,就可以规避这种情况。
值得注意的一点是,权限管理的模块过多,全部放在ability下面会显得很臃肿。
我们可以mixin到ability.rb
#lib/permissions/some_manage.rbmodule Permissions module SomeManage def method #do somthing end endend#app/models/ability.rbclass Ability include CanCan::Ability include Permissions::SomeManage def initialize(user) user ||= StoreStaff.new # guest user (not logged in) if user.admin.present? can :manage, :all else do_somthing end end def do_somthing method end end
这是碰到的一些小问题,希望可以帮助大家。
1 0
- rails 使用cancancan的一些心得
- Ruby On Rails开发中关于jQuery-datetimepicker-rails的一些使用心得
- rails 的一些方法使用
- 使用 7230的一些心得
- TreeView使用的一些心得
- 使用JTAG的一些心得
- BerkeleyDB使用的一些心得
- 使用JTAG的一些心得
- Siverlight的一些使用心得
- thickbox的一些使用心得
- eclipse 的一些使用心得
- cocostudio使用的一些心得
- Sqoop的一些使用心得
- hiredis的一些使用心得
- 使用HighChart的一些心得
- Neo4j 的一些使用心得
- 使用pygame的一些心得
- MySql的一些使用心得
- android intent MIME type
- Android Java / Kotlin 程序员开发调试工具。Debug Bottle 的所有功能均建立在 App 的 debug 版本中,不会对 release 版本产生任何影响。Debug Bo
- PHP RSA无法解密出来 解密为空 解决方法
- 文字编码
- 通俗易懂的小例子来演示如何使用NestedScroll
- rails 使用cancancan的一些心得
- iOS自定义相机截取图片旋转90°的问题
- Linux shell命令2
- javascript数组去重 - 效率测试
- check how many files are added or modified or deleted by git command and python
- Android开发UI布局必备基础知识
- 安装rebar时提示"Uncaught error in rebar_core"
- CocosCreator反射在Android中的使用
- linux内核学习的屠龙刀、倚天剑(需要搭配硬件调试环境)