Bok tamo! Kao dobavljač Hgr Railsa, često me pitaju kako koristiti Pundit za autorizaciju u Hgr Rails aplikacijama. U ovom postu na blogu, provest ću vas kroz proces i podijeliti nekoliko savjeta koji će vam olakšati život.
Prvo, razgovarajmo malo o tome što su Hgr Rails. Hgr Tračnice su bitan dio mnogih sustava linearnog gibanja. Nude visoku preciznost i izdržljivost, što ih čini super popularnim u raznim industrijama. Više o njima možete saznati na ovoj stranici:Hgr tračnice. A ako vas zanimaju različite vrste linearnih vodilica, provjeriteVrste linearnih vodilica. Jedna specifična vrsta koja bi vas mogla zanimati jeGHH-CA Linearna vodilica.
Sada, zaronimo u Pundit. Pundit je dragulj koji olakšava rukovanje autorizacijom u Rails aplikacijama. Slijedi načelo odvajanja logike autorizacije od vaših modela i kontrolera, što je izvrsna praksa za održavanje čistoće vašeg koda i održavanja.


Početak rada s Punditom
Prvi korak je dodavanje Pundita vašoj Rails aplikaciji. Otvorite svojeSpremi datotekei dodajte sljedeći redak:
dragulj 'stručnjak'
Onda trčiinstalacija paketau vašem terminalu. Kada to učinite, trebate postaviti Pundit u svoju aplikaciju. U vašemApplication Controller, dodajte sljedeći kod:
class ApplicationController < ActionController::Base include Pundit rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized private def user_not_authorized flash[:alert] = "Niste ovlašteni za izvođenje ove akcije." redirect_to(request.referrer || root_path) kraj kraj
Ovaj kod uključuje modul Pundit u vašemApplication Controlleri postavlja blok za spašavanje kada korisnik pokuša izvršiti radnju za koju nije ovlašten.
Stvaranje politika
Politike su u srcu Pundita. Oni su mjesto gdje definirate pravila autorizacije za svoju aplikaciju. Za izradu pravila možete koristiti Rails generator. Na primjer, ako imateProizvodmodel, možete kreirati pravilo za njega ovako:
tračnice generiraju pundit:politički proizvod
Ovo će stvoriti datoteku pod nazivompolitika_proizvoda.rbuaplikacija/pravilaimenik. Otvorite ovu datoteku i vidjet ćete osnovnu strukturu poput ove:
class ProductPolicy < ApplicationPolicy def index? false end def show? false end def create? false end def novo? stvoriti? kraj def ažuriranja? false end def edit? ažurirati? završiti def uništiti? lažan kraj kraj
Ove metode predstavljaju različite radnje koje korisnik može pokušati izvesti naProizvod. Prema zadanim postavkama, svi se vraćajulažno, što znači da nitko nije ovlašten obavljati te radnje. Morate prilagoditi ove metode na temelju zahtjeva vaše aplikacije.
Na primjer, recimo da samo administratori mogu stvarati, ažurirati i uništavati proizvode, ali svi korisnici mogu vidjeti popis i detalje proizvoda. Politiku možete izmijeniti ovako:
class ProductPolicy < ApplicationPolicy def index? pravi end def show? pravi kraj def stvoriti? korisnik.admin? kraj nove? stvoriti? kraj def ažuriranja? korisnik.admin? end def edit? ažurirati? završiti def uništiti? korisnik.admin? kraj kraja
U ovom kodu,korisnikvarijabla predstavlja trenutno prijavljenog korisnika. Theadmin?Pretpostavlja se da je metoda metoda naKorisnikmodel koji se vraćapraviako je korisnik admin.
Korištenje pravila u kontrolerima
Nakon što stvorite svoja pravila, možete ih koristiti u svojim kontrolerima. Na primjer, u vašemKontrolor proizvoda, možete dodati sljedeći kod:
class ProductsController < ApplicationController def index @products = Product.all authorize @products end def show @product = Product.find(params[:id]) authorize @product end def new @product.new authorize @product end def create @product = Product.new(product_params) authorize @product if @product.save redirect_to @product, obavijest: 'Proizvod je uspješno kreiran.' else render :new end end def edit @product = Product.find(params[:id]) authorize @product end def update @product = Product.find(params[:id]) authorize @product if @product.update(product_params) redirect_to @product, obavijest: 'Proizvod je uspješno ažuriran.' else render :edit end end def destroy @product = Product.find(params[:id]) authorize @product @product.destroy redirect_to products_url, obavijest: 'Proizvod je uspješno uništen.' end private def product_params params.require(:product).permit(:name, :price) end end
Theovlastitimetoda se poziva u svakoj akciji kako bi se provjerilo je li trenutni korisnik ovlašten izvršiti tu radnju. Ako korisnik nije ovlašten, Pundit će podići aPundit::NotAuthorizedError, koje će uhvatitikorisnik_neovlaštenmetoda uApplication Controller.
Politike opsega
Ponekad biste mogli ograničiti popis resursa kojima korisnik može pristupiti. Na primjer, možda imate sustav u kojem korisnici mogu vidjeti samo proizvode koje su sami izradili. Pundit vam omogućuje definiranje politika opsega za ovu svrhu.
Prvo stvorite klasu opsega za svoj model. ZaProizvodmodel, možete stvoriti aProductPolicy::Scopeklasa ovako:
class ProductPolicy < ApplicationPolicy class Scope < Scope def resolve if user.admin? scope.all else scope.where(user_id: user.id) end end end # Ostale metode pravila... kraj
uodlučnostmetodom, definirate logiku za ograničavanje opsega resursa. U ovom primjeru administratori mogu vidjeti sve proizvode, dok obični korisnici mogu vidjeti samo proizvode koje su sami izradili.
Zatim, u vašemKontrolor proizvoda, možete koristiti pravilo opsega ovako:
class ProductsController < ApplicationController def index @products = policy_scope(Product) authorize @products end # Druge akcije kontrolera... end
Theopseg_politikemetoda vraća relaciju opsega na temelju politike opsega koju ste definirali.
Zaključak
Korištenje Pundita za autorizaciju u Hgr Rails aplikacijama odličan je način da svoj kod održite organiziranim i sigurnim. Odvajanjem vaše autorizacijske logike u pravila, možete jednostavno upravljati tko može izvršiti koje radnje u vašoj aplikaciji.
Ako ste na tržištu za Hgr Rails ili druge proizvode za linearno kretanje, slobodno se obratite za razgovor o kupnji. Ovdje smo da vam pružimo proizvode visoke kvalitete i izvrsnu uslugu.
Reference
- Službena dokumentacija stručnjaka
- Tračnice Vodiči o autorizaciji
