ruby on rails 权限管理gem cancan

系统的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