我的要求是,我必须能够注册为超级管理员/管理员/访客,之后,我必须创建一个示例项目作为超级管理员/管理员/访客。
超级管理员拥有创建,查看,编辑,删除等所有权限。管理员拥有编辑,视图和访客权限只能创建访问权限。
但是,在我的应用程序中,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
答案 0 :(得分:0)
对于你最后一句话中的先发人员,你打电话:
elsif user.role?(:guest)
而在其他人中你正在打电话
elsif user.has_role?
下面有任何问题。因为我还没有评论。