Ich benutze devise
, und bis jetzt habe ich nur die devise
Controller zusammen mit den Ansichten für drei Benutzer (user1, user2, admin) hinzugefügt. Ich habe keine before_action :authenticate_user!
in einem Controller. Grundsätzlich habe ich bis jetzt this gemacht.
So können sich derzeit alle registrierten Benutzer einloggen und alle Inhalte ansehen/bearbeiten. An dieser Stelle möchte ich jeden Benutzer darauf beschränken, nur seine Inhalte anzuzeigen oder zu bearbeiten.Rails: Erlaubt Benutzern nur ihre eigenen Inhalte zu sehen oder zu bearbeiten
Das ist im Grunde, was ich habe: Der Admin wird Zugriff auf alle der App haben. Benutzer1 hat Zugriff auf get 'books/search' => 'books#search', as: 'search_books'
und damit root 'books#search'
. Und Benutzer2 wäre in der Lage, ein Buch über die `Ressourcen: Bücher hinzuzufügen/zu löschen/zu bearbeiten und auch sein aktuelles Konto anzuzeigen.
Nicht sicher, welchen Zugriff ich die resources :plans, resources :accounts, resources :transactions
geben sollte. Pläne sind, Pläne zusammen mit den Transaktionen zu kaufen, und Konten gehören zu Benutzer2. Sie können die folgenden Assoziationen sehen.
Ich habe ein wenig Nachforschung darüber und fand ein paar gems
, CanCan
, rolify
, die den Benutzern Rollen hinzufügen.
Gibt es eine andere Möglichkeit, die Rollen mit devise
zu implementieren?
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
Sie klingen verwirrt über das, was Sie hier erreichen möchten .... Wenn Sie nur die Fähigkeit hinzufügen möchten, Benutzer als 'admin' zu markieren, dann fügen Sie einfach eine' is_admin' boolesche Spalte hinzu Benutzertisch? Wenn Sie Probleme beim Einrichten der Controller-/Permitter-Logik haben, geben Sie bitte ** Ihren Code ** an, damit wir das Problem diagnostizieren können. –
Sie sollten Pandit gem. => https://github.com/elabs/pundit <= es ist genau das, was du brauchst. –
Können Sie näher erläutern, wie Sie die Unterstützung für mehrere Benutzer implementiert haben? Wie sind Nutzer und deren Inhalte verbunden, wie sind die Assoziationen definiert? – spickermann