ruby on rails 权限管理gem cancan
系统的model关系如下:
用户类
class AdminUser
embeds_many :permissions
accepts_nested_attributes_for :permissions, :allow_destroy => true
end
用户能力类
class Ability
include CanCan::Ability
def initialize(user)
can do |action, subject_class, subject|
end
权限类
class Permission
include Mongoid::Document
embedded_in :admin_user
end
首先添加gem: gem "cancan"
admin_user/new.html.erb 新建如下

在新建用户的同时,新建用户对应的权限(复选框为选择权限)
mongoid的 accepts_nested_attributes_for 可以省去很多事。
在mall/index.html.erb 加判断
<% if can? :create, Mall %>
<%= link_to '新建', new_admin_mall_path(), :class => 'btn btn-primary' %>
<% end %>
如果用户有权限新建,新建按钮会显示出来,否则按钮不会出现。
这样的话还有一个问题,能不能在地址栏直接输入http://localhost:3000/admin/malls/new,执行一个新建操作?
为了防止这种情况,我们必须 Protecting malls_Controller.rb
在new方法加入 authorize! if cannot? :new, Mall,防止地址栏执行action.
def new
@mall = Mall.new
authorize! if cannot? :new, Mall
end
这样一个简易的用户权限管理功能就做好了。
JUST DO IT
ruby on rails 权限管理gem cancan的更多相关文章
- rails权限管理—devise+cancan+rolify
使用devise.cancan和rolify组件建立用户权限模型的说明. devise:负责用户注册.登录.退出.找回密码等操作.细节参考devise on github cancan:负责角色建立. ...
- 安装Ruby On Rails时运行“gem install rails”没有反应怎么办?
这两天在我的mac机上安装Ruby On Rails,感觉很爽,似乎在使用一个Windows和Linux的结合体,要界面有界面,要命令行有命令行. 不过安装Ruby On Rails的过程中遇到一个问 ...
- Ruby on Rails: 使用devise+cancan+rolify建立完整的权限管理系
devise.cancan和rolify这三个组件结合,可以建立完整而强大的用户权限模型. devise介绍,负责用户注册.登录.退出.找回密码等操作.细节参考devise on github can ...
- 管理不同版本ruby和rails的利器——rvm
近年来,ruby on rails逐渐火了起来,我想各位码农早就耳闻,特别是那些做B/S项目的童鞋,早就想跃跃一试了. 笔者也是初次接触ruby on rails ,我想,对于初学者来说,最好的学习方 ...
- Rails-treasure chest4: 使用图表对资料进行分析chart.js(及其他);管理用户权限的gem 'Pumdit'(6000🌟)
* 多档案上传* 图表资料分析 Chartkick gem或者 chart.js* 用户权限控管 gem Pundit (6000✨) *HTML E-mail 寄送 : gem premaile ...
- [Ruby on Rails系列]2、开发环境准备:Ruby on Rails开发环境配置
前情回顾 上次讲到Vmware虚拟机的安装配置以及Scientific Linux 6.X系统的安装.这回我们的主要任务是在Linux操作系统上完成Ruby on Rails开发环境的配置. 在配置环 ...
- 开发环境准备:Ruby on Rails开发环境配置
开发环境准备:Ruby on Rails开发环境配置 前情回顾 上次讲到Vmware虚拟机的安装配置以及Scientific Linux 6.X系统的安装.这回我们的主要任务是在Linux操作系统上完 ...
- Linux超快速安装Ruby on Rails
Linux超快速安装Ruby on Rails 时间 2014-11-25 11:45:11 Flincllck Talk 原文 http://www.flincllck.com/quick-ins ...
- Ubuntu搭建Ruby on Rails环境
安装Ruby 由于Ubuntu的apt包管理器的ruby版本过旧,故考虑从源码编译安装.这里以安装ruby2.3.0为例: sudo apt-get install build-essential z ...
随机推荐
- Android-Xml,PullParser,解析
在上一篇博客,Android-XML格式描述,介绍来XML在Android中的格式: 解析persons.xml文件内容: <?xml version="1.0" encod ...
- ABP 基础设施层——集成 Entity Framework
本文翻译自ABP的官方教程<EntityFramework Integration>,地址为:http://aspnetboilerplate.com/Pages/Documents/En ...
- SQL server经验分享:SQLSERVER 被标记为“可疑”的数据库处理方法
--MyDB为修复的数据名USE MASTER GO SP_CONFIGURE 'ALLOW UPDATES',1 RECONFIGURE WITH OVERRIDE GO ALTER DATABAS ...
- spring boot 使用 HandlerInterceptor
# 背景 在实际项目中,接口出于安全考虑,都会有验签的计算.目前接触的项目来看基本都是时间戳+干扰因子 然后md5计算的方式.现在学习,写一个简单demo, 其实如果不引入拦截器的话,验签计算全部在c ...
- SQL学习笔记2
2018.10.16:周二 --进阶 --别名 SELECT StuName,StuNum+','+StuClass+','+StuGender+','+StuPhone AS 信息 FROM S ...
- WPF窗口启动时最大化
在xaml对应的后台代码文件的初始化方法中: public ShellView() { InitializeComponent(); #region 启动时串口最大化显示 Rect rc = Syst ...
- linux 修改MTU值
Linux系统还可以通过如下方式查看.修改MTU值. 查看:cat /sys/class/net/eth0/mtu 设置:echo "1460" > /sys/class/n ...
- POST 400 (BAD REQUEST)
遇到这种错,1,F12打开控制台,2,点击network,找到发送的请求. 3,点击请求,4,看右侧的 Header Preview Response 应该能找到原因. 就拿刚才来说,找了好几个小时原 ...
- jvm高级特性(2)(判断存活对象算法,finaliza(),方法区回收)
JVM高级特性与实践(二):对象存活判定算法(引用) 与 回收 垃圾回收器GC(Garbage Collection) 于1960年诞生在MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语 ...
- Swift 里字符串(一)概览
感受一下字符串相关的源文件个数  String 概览 是一个结构体 只有一个变量,类型是 _StringGuts  如上所示,String 真正的内容在__StringStorage或者__Sha ...