2017-08-22 41 views
0

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

Role.rb: class Role sowmya

+0

我需要這方面的一些指導,我從這裏開始工作5天。 – sowmya

+0

在** ability.rb **中,將'user.role?(:guest)'更改爲'user.has_role?(:guest)'。 – Roshan

回答

0

對於您最後一次發言中的首發者,您打電話給:

elsif user.role?(:guest) 

而在其他您所呼叫

elsif user.has_role? 

有任何疑問,下面提問。因爲我還沒有評論。

+0

我已經將user.role?(:guest)更改爲user.has_role?(:guest)....仍然沒有區別.. :( – sowmya

+0

看起來好像您的角色沒有正確設置,因爲CanCanCan會假設if您無權訪問模型,在您的實例Project中,它可能會將該模型的訪問權限設置爲(不能:管理項目)。您可以發佈應用程序控制器的代碼嗎? –

+0

class ApplicationController sowmya