rails权限管理—devise+cancan+rolify
2016-01-07 15:50
706 查看
原文链接: http://www.cnblogs.com/zs-note/p/4256226.html使用devise、cancan和rolify组件建立用户权限模型的说明。devise:负责用户注册、登录、退出、找回密码等操作。细节参考devise on githubcancan:负责角色建立、对角色授权、在页面中根据授权是否显示元素,以及模型中超出授权时抛出异常。细节参考rolifyon githubrolify:负责将用户与角色关联。细节参考rolify on github其中,如果系统拥有自己独立的用户管理模块,可以不使用devise控件。这里先介绍仅包含cancan+rolify的部分。![](http://images.cnitblog.com/blog/571311/201502/021446150462424.png)
至此,环境配置基本完成
这句命令会产生一个用户指南,告诉你该做的几件事请,以下是内容翻译(已经去除heroku部署的那一条,增加了登录退出选项的说明):1) 确定你的环境中有一个缺省的URL,config/environments/development.rb:![](http://images.cnitblog.com/blog/571311/201502/021524014215381.png)
在Controller中增加认证过滤,即可在访问该模型页面时转向用户登录页面(这自行没验证)在需要认证的模型中,如HomeController,增加下面代码:
一、环境安装配置
1.安装gem包,Gemfile。
gem 'cancan' gem 'rolify'
2. 创建cancan的Ability
$ rails generate cancan:ability #该命令在model中建立ability.rb文件
![](http://images.cnitblog.com/blog/571311/201502/021446150462424.png)
3.和rolify的Role
$ rails generate rolify Role User $ rake db:migrate #如下图所示 #在config中创建rolify的配置文件 #建立数据迁移文件,添加role,user_role模型,并创建数据表 #向user模型中添加rolify方法
![](http://images.cnitblog.com/blog/571311/201502/021448414994633.png)
二、权限管理
1.角色权限配置文件,集中管理权限信息
所有权限信息在app/models/ability.rb文件中存储,范例,如下:class Ability include CanCan::Ability def initialize(user) if user.blank? # not logged in cannot :manage, :all basic_read_only elsif user.has_role?(:admin) # admin can :manage, :all elsif user.has_role?(:member) can :create, Topic can :update, Topic do |topic| (topic.user_id == user.id) end can :destroy, Topic do |topic| (topic.user_id == user.id) end basic_read_only else # banned or unknown situation cannot :manage, :all basic_read_only end end protected def basic_read_only can :read, Topic can :list, Topic can :search, Topic end end
2、权限判断
view中的权限:<% if can? :update, @article %> <%= link_to "Edit", edit_article_path(@article) %> <% end %>controller中的权限:
class ArticlesController < ApplicationController authorize_resource def show # @article is already authorized end end
3、用户角色添加
#在角色分配部分给用户实力user对象添加角色 @user.add_role 'admin'
附:authorize_resource方法解析
authorize_resource 根據 CanCan::Ability 的权限表对 resource 进行权限判断。而 resource 必定是controller的同名实例。也就是说 ArticlesController 对应的必然是 @article。如果在 ArticlesController 里需要使用 @post,只需在 controller 里指定资源实例的名字,如,authorize_resource :post三、devise的使用
1、安装gem包
gem 'devise'
2、devise初始化
$ rails generate devise:install
![](http://images.cnitblog.com/blog/571311/201502/021518584844998.png)
config.action_mailer.default_url_options = { :host => 'localhost:3000' }如果在production环境, :host 必须设置成应用的真实主机名。2) 确定已经在config/routes.rb中定义了root_url(注意删除public下面的index.html), 例如:
root :to => "home#index"可以使用下面命令生成一个home#index的页面:
rails g controller home index3) 在app/views/layouts/application.html.erb中增加消息提醒,例如:
<p class="notice"><%= notice %></p> <p class="alert"><%= alert %></p>4) 很多时候还需要增加登录、退出的选项:
$ rails g devise:views生成用户模型(你可以使用其他名称代替User),并执行数据迁移
$ rails g devise User$ rake db:migrate#新建数据迁移文件,向user表中添加必要的字段
![](http://images.cnitblog.com/blog/571311/201502/021524014215381.png)
![](http://images.cnitblog.com/blog/571311/201502/021525097037875.png)
before_filter :authenticate_user!参考文档: 《Ruby on Rails: 使用devise+cancan+rolify建立完整的权限管理系统》 http://my.oschina.net/silentboy/blog/204772《使用Devise+Rolify + Cancan 控管權限》 http://deveede.logdown.com/posts/206943-use-deviserolify-cancan-control-permissions《Cancan 實作角色權限設計的最佳實踐(1、2、3) 》 ref:[http://blog.xdite.net/posts/2012/07/30/cancan-rule-engine-authorization-based-library-1/] ref:[http://blog.xdite.net/posts/2012/07/30/cancan-rule-engine-authorization-based-library-2/] ref:[http://blog.xdite.net/posts/2012/07/30/cancan-rule-engine-authorization-based-library-3/] 《Rails插件:CanCan权限验证插件学习总结》 ref:[http://blog.csdn.net/jackal998099/article/details/21519925]
相关文章推荐
- 人工智能学习笔记(一)命题逻辑
- QWidget,QMainWindow和QDialog的区别 .
- 论机器人的环境感知与智主移动-兼谈基于微分几何的人工智能
- LeetCode Permutaions
- LintCode: Number of Airplanes in the Sky
- [已解决]使用matplotlib生成jpg报错:encoder jpeg not available
- 处于CLOSE_WAIT和TIME_WAIT状态连接的原因及解决
- Baidu地图的相关开发经验
- Communications link failure
- YTU 1007: Redraiment猜想
- 解决has leaked ServiceConnection com.baidu.location.c@427b6780
- 实现Gmail邮箱翻转效果之ActionBar
- YTU 1003: Redraiment的遭遇
- 实现Gmail邮箱翻转效果之翻转动画
- 实现Gmail邮箱翻转效果之开篇
- 在selenium测试中使用XPATH功能函数starts-with、contains、descendant、ancestor、text()定位网页元素
- 用 map 输出一定格式的字符串Plain=w=b~|~t=e~|~e=c~|~r=d~|~q=a
- Saltstack的grains组件(5)
- 新款Macbook Air安装Windows8.1黑屏解决教程
- [王垠系列]Braid - 一个发人深思的游戏