系统的model关系以下:html
用户类htm
class AdminUserblog
embeds_many :permissions
accepts_nested_attributes_for :permissions, :allow_destroy => trueget
endit
用户能力类io
class Ability
include CanCan::Ability
def initialize(user)class
can do |action, subject_class, subject|
endmodel
权限类权限
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