Ich erstelle eine Bewerbung für eine Jobbörse. Ich bin neu in der Programmierung und bringe mir das Rails-Framework bei.
Ich verwende Devise zur Authentifizierung. Ich werde zwei verschiedene Arten von Benutzern haben; Job Seeker
und Employer
. Der Arbeitssuchende erstellt ein Profil und sucht nach Stellenausschreibungen. Der Arbeitgeber erstellt ein Unternehmensprofil und veröffentlicht Stellenanzeigen. In Zukunft kann der Arbeitgeber auch nach Mitarbeitern suchen, die auf Qualifikationen, Erfahrungen, Ausbildung usw. basieren. Im Moment baue ich jedoch nur mein MVP auf.
3 Antworten
Diese Art von Funktionalität ist schwierig, da Sie die Funktionalität vor der Implementierung festlegen müssen (IE, die meisten Leute werden wegen Devise
aufgehängt, während sie möglicherweise überhaupt nicht funktioniert).
Sie haben zwei Möglichkeiten:
- Rollen (Autorisierung)
- Mehrere Modelle (Authentifizierung)
Das Gerät ist ein Authentifizierungssystem (Benutzer angemeldet). Möglicherweise verwenden Sie die Autorisierung besser (kann der Benutzer x oder y ausführen). Die Autorisierung liegt außerhalb des Anwendungsbereichs von Devise.
Sie könnten zwar mehrere Modelle verwenden (Devise), aber ich denke, es verursacht zu viel unnötiges Aufblähen für das, was Sie brauchen.
Stattdessen würde ich ein sehr einfaches Rollensystem verwenden (unter Verwendung von {) {X0}}):
#app/models/user.rb
class User < ActiveRecord::Base
enum role: [:job_seeker, :employer]
has_one :profile
before_create :build_profile
has_many :applications
has_many :listings, through: :applications
end
#app/models/application.rb
class Application < ActiveRecord::Base
belongs_to :listing
belongs_to :user
end
#app/models/listing.rb
class Listing < ActiveRecord::Base
has_many :applications
has_many :applicants, through: :applications, class_name: "User", foreign_key: :user_id
end
Sie müssen Ihrer users
Tabelle eine role
Spalte (int
) hinzufügen. Sie erstellen die Standard -Rolle mithilfe eines default: [x]
-Schalters, wenn Sie Ihre Spalte erstellen:
def change
add_column :users, :role, :integer, default: 0 #-> defaults to job seeker
end
-
Sie haben mehrere Faktoren beschrieben, die sich perfekt dafür eignen:
Job seeker
erstellt ein ProfilEmployer
erstellt ein Profil und veröffentlicht Einträge
... alles bedeutet, dass Ihr "flow" für beide Benutzertypen ähnlich bleibt. Sie müssen nur verwalten, was jeder Benutzer mit der Autorisierung tun kann.
Konfiguration
#config/routes.rb
resource :profile, controller: :users, only: [:show, :update] #-> url.com/profile
resources :listings, only: [:show] do
post :apply, on: :member #-> url.com/listings/:id/apply
end
resources :companies, controller: :users, only: [:show]
#app/controllers/users_controller.rb
class UsersController < ApplicationController
#show will automatically be loaded
def update
current_user.update profile_params
end
private
def profile_params
params.require(:user).permit(profile_attributes: [:name, :etc, :etc])
end
end
#app/views/users/show.html.erb
<%= form_for current_user do |f| %>
<%= f.fields_for :profile do |p|
<% if current_user.job_seeker? %>
<%= f.text_field :name, placeholder: "Your name" %>
<% elsif current_user.employer? %>
<%= f.text_field :name, placeholder: "Company name" %>
<% end %>
<% end %>
<%= f.submit %>
<% end %>
Sie können dann Folgendes verwenden, um zu überprüfen, ob ein Benutzer Einträge erstellen oder nur anzeigen kann:
#app/controllers/listings_controller.rb
class ListingsController < ApplicationController
before_action :check_seeker, only: [:apply]
before_action :check_employer, only: [:new, :create, :destroy]
def new #-> employers
@listing = current_user.listings.new
end
def apply #-> job seekers
@listing = Listing.find params[:id]
@application = current_user.applications.new
@application.listing = @listing
redirect_to @listing, notice: "Application successful!" if @application.save
end
private
def check_seeker
redirect_to listings_path, notice: "Only Job Seekers Allowed" unless current_user.job_seeker?
end
def check_employer
redirect_to root_url, notice: "Only Employers Allowed" unless current_user.employer?
end
end
Hoffentlich gibt Ihnen dies das Wesentliche.
Entwickeln
Damit Devise mit Ihrer neuen Spalte funktioniert, müssen Sie den Devise Sanitizer erweitern ::
#app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) << :role
end
end
Auf diese Weise können Sie das Feld role
bei der Anmeldung ändern:
#app/views/devise/registrations/new.html.erb
.....
<%= f.select :role, User.roles %>
Das Gerät eignet sich gut für die Authentifizierung, aber für die Rollen- und Zugriffskontrolle sollten Sie sich Rolify ansehen: https://github.com/ RolifyCommunity / rolify.
Auf diese Weise können Sie ein einzelnes Benutzermodell beibehalten und den Zugriff auf verschiedene Funktionen mit Rollenabfragen steuern, z.
unless current_user.has_role?(:admin)
redirect_to ...
else
render ...
end
Für Rollen können Sie CanCanCan
gem und RoleModel
gem mit devise
verwenden, was für Benutzer mit unterschiedlichen Rollen besser ist.
Fähigkeiten mit Cancancan definieren
Beispiel für Benutzerrollen mit oben genannten Edelsteinen.
Verwandte Fragen
Neue Fragen
ruby-on-rails
Ruby on Rails ist ein Open Source-Webanwendungsframework mit vollem Stapel, das in Ruby geschrieben wurde. Es folgt dem beliebten MVC-Framework-Modell und ist bekannt für seinen "Convention over Configuration" -Ansatz für die Anwendungsentwicklung.