2017-08-22 15 views
0

私の要件は、スーパー管理者/管理者/ゲストとして登録できなければならず、その後、スーパー管理者/管理者/ゲストとしてサンプルプロジェクトを作成する必要があります。 。ruby​​ on railsの役割に基づいたユーザーリダイレクト

スーパー管理者は、作成、表示、編集、削除などのすべての権限を持っています。管理者は、編集、表示、ゲストなどの権限には作成アクセスのみを持たなければなりません。

しかし、私のアプリケーションでは、ゲストはプロジェクトリストの作成、更新、削除などのすべての権限も取得しています。

この問題を解決するには、私が使用し

宝石は、以下のとおりです。役割に基づいてリダイレクト用

gem 'devise' 

gem 'cancancan', '~> 1.10' 

gem 'rolify' 

工夫/登録/ 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

Role.rb: クラスの役割 sowmya

+0

私はこの上でいくつかのガイダンスを必要とする、私は5日以来、ここにstucked。 – 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は、あなたの役割が正しく設定されていないようですモデルにアクセスできない場合は、プロジェクトにはそのモデルへのアクセスが設定されている可能性があります(プロジェクトを管理できません)。 –

+0

クラスApplicationController sowmya

関連する問題