2017-10-03 16 views
0

私はdeviseを使用しています。これまではdeviseコントローラを3人のユーザー(user1、user2、admin)のビューとともに追加しました。どのコントローラーにもbefore_action :authenticate_user!はありません。基本的にthisはこれまで私が行ったことです。
したがって、現在登録されているすべてのユーザーは、ログインしてすべてのコンテンツを表示/編集できます。この時点では、各ユーザーが自分のコンテンツのみを表示または編集するように制限したいと考えています。Rails:ユーザーが自分のコンテンツのみを表示または編集できるようにします。

これは基本的に私が後にしていることです。管理者はすべてのアプリケーションにアクセスできます。ユーザー1はget 'books/search' => 'books#search', as: 'search_books'にアクセスし、root 'books#search'にアクセスします。また、User2は `resources:books 'を使って本を追加/削除/編集することができ、現在のアカウントも表示することができます。

resources :plans, resources :accounts, resources :transactionsにどのようなアクセス権を与えるべきかわかりません。プランは、トランザクションとともにプランを購入するためのものであり、アカウントはuser2に属します。あなたは以下の関連を見ることができます。

私はこれに関する少しの研究を行い、ユーザーに役割を追加するgems,CanCanrolifyというカップルを見つけました。

deviseでロールを実装できる別の方法はありますか?あなたは何ができるか

Rails.application.routes.draw do 

    root 'books#search' 

    get 'books/search' => 'books#search', as: 'search_books' 
    get "/cancel_subscription", to: "accounts#cancel_subscription", as: "cancel_subscription" 

    devise_for :admins, controllers: {registrations: 'admins/registrations', sessions: 'admins/sessions'}, :class_name => 'Admin' do 
    get "admins/dashboard"=> "admins/sessions#dashboard", :as => "admin_dashboard" 
    end 

    devise_for :users1, controllers: {registrations: 'users1/registrations', sessions: 'users2/sessions'} 
devise_for :users2, controllers: {registrations: 'users2/registrations', sessions: 'users2/sessions'} 

resources :books do 
    resources :comments 
end 
resources :categories 
resources :plans 
resources :accounts 
resources :transactions, only: [:new, :index, :create] 
end 

class Comment < ApplicationRecord 
    belongs_to :book 
    belongs_to :user1 
end 

class Books < ApplicationRecord 
    has_many :comments 
end 

class User1 < ApplicationRecord 
    devise :database_authenticatable, :registerable, 
:recoverable, :rememberable, :trackable, :validatable 

    has_many :comments 
end 

class User2 < ApplicationRecord 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    has_one :account, autosave: true 
    has_many :books 

    accepts_nested_attributes_for :account 
end 

class Admin < ApplicationRecord 
    devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable 
end 
+2

あなたはここで達成しようとしていることについて混乱していると思います。あなたがしたいのは、ユーザーを 'admin'とマークする機能を追加するだけです。なぜなら、' is_admin'ブール列を'users'テーブル?コントローラ/許可ロジックを設定する際に問題がある場合は、問題を診断できるように**コードを表示してください**。 –

+0

pundit gemを使うべきです。 => https://github.com/elabs/pundit <=それはあなたが必要とするものです。 –

+0

マルチユーザサポートの実装方法について詳しく説明できますか?ユーザーとそのコンテンツはどのように接続されていますか、関連はどのように定義されていますか? – spickermann

答えて

0

あなたはこのコントローラ内でプライベートメソッド作り、before_actionコールバックを通してそれを呼び出すことによって、それを絞り込むことができ

if current_user.class.eql?(class_name_of_user) #perform some action end で、現在のクラスの型をチェックすることです。

関連する問題