基于ruby on rails

时间:2017-08-22 18:33:59

标签: ruby-on-rails devise cancancan rolify

我的要求是,我必须能够注册为超级管理员/管理员/访客,之后,我必须创建一个示例项目作为超级管理员/管理员/访客。

超级管理员拥有创建,查看,编辑,删除等所有权限。管理员拥有编辑,视图和访客权限只能创建访问权限。

但是,在我的应用程序中,Guest还获得了项目列表上的创建,更新,删除等所有权限。

要解决此问题,

我使用的宝石是:

gem 'devise'

gem 'cancancan', '~> 1.10'

gem 'rolify'

基于角色的重定向位于 devise / registration / new.html.erb:

一次,我创建一个新用户,(通过选择单选按钮)我能够将其值1(对于超级管理员)/ 2(管理员)/ 3(访客)保存到数据库中

应用/模型/ ability.rb:

class Ability
  include cancan::Ability
  def initialize(user)
     user ||= User.new

    if user.has_role?(:super_admin)
      can :manage, :all
    elsif user.has_role?(:admin)
      can :create, Project
      can :update, Project do |project|
        project.ongoing?
      end
      can :read, Project
    elsif user.role?(:guest)
      can :create, Project
    end

  end
end

应用/模型/ role.rb:

class Role < ActiveRecord::Base
    resourcify
  has_and_belongs_to_many :users, :join_table => :users_roles

  belongs_to :resource,
             :polymorphic => true,
  validates :resource_type,
            :inclusion => { :in => Rolify.resource_types },
            :allow_nil => true

  scopify
end

应用/模型/ users.rb的:

class User < ActiveRecord::Base
  rolify :role_cname => 'Usertype'
  devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable
  has_many :projects, dependent: :destroy

  def super_admin?
   has_role?(:super_admin)
  end

  def admin?
   has_role?(:admin)
  end

  def guest?
   has_role?(:guest)
  end 
end

1 个答案:

答案 0 :(得分:0)

对于你最后一句话中的先发人员,你打电话:

elsif user.role?(:guest)

而在其他人中你正在打电话

elsif user.has_role?

下面有任何问题。因为我还没有评论。