我的要求是,我必须能够注册为超级管理员/管理员/访客,之后,我必须创建一个示例项目作为超级管理员/管理员/访客。基于在rails上的角色的用户重定向
超级管理员拥有创建,查看,编辑,删除等所有权限。管理员拥有编辑,查看和访客权限等权限,只能创建访问权限。
但是,在我的应用程序中,Guest还获得了项目列表上创建,更新,删除等所有权限。
要解决此问题,
我使用的宝石:
gem 'devise'
gem 'cancancan', '~> 1.10'
gem 'rolify'
基于角色重定向是色器件/注册/ new.html.erb:
有一次,我创建了一个新用户,(通过选择单选按钮)我能够将其值1(对于超级管理员)/ 2(Admin)/ 3(Guest)保存到数据库中
应用程序/模型/ 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
Role.rb: class Role
sowmya
我需要这方面的一些指导,我从这里开始工作5天。 – sowmya
在** ability.rb **中,将'user.role?(:guest)'更改为'user.has_role?(:guest)'。 – Roshan