基于Ruby on rails中角色的用户重定向



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

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

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

要解决此问题,

我使用的宝石是:

gem 'devise'
gem 'cancancan', '~> 1.10'
gem 'rolify'

对于基于角色的重定向,在设计/注册/新.html.erb

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

app/models/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

app/models/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

app/models/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

首先,在你所说的最后一句话中

elsif user.role?(:guest)

而在你正在调用的其他人中

elsif user.has_role?

任何问题都在下面提出。由于我还无法发表评论。

相关内容

最新更新