我的要求是,我必須能夠註冊爲超級管理員/管理員/訪客,之後,我必須創建一個示例項目作爲超級管理員/管理員/訪客。基於在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