Jan 15, 2026

Kako koristiti Pundit za autorizaciju u Hgr Rails?

Ostavi poruku

Hej tamo! Kao dobavljač Hgr Railsa, često me pitaju kako koristiti Pundit za autorizaciju u Hgr Rails aplikacijama. U ovom postu na blogu ću vas provesti kroz proces i podijeliti nekoliko savjeta koji će vam olakšati život.

Prvo, hajde da pričamo malo o tome šta su Hgr Rails. Hgr šine su bitan dio mnogih sistema linearnog kretanja. 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 Rails. A ako vas zanimaju različite vrste linearnih vodilica, provjeriteVrste linearnih vodilica. Jedna specifična vrsta koja bi vas mogla zanimati jeGHH-CA Linearni vodič.

Sada, zaronimo u Pundit. Pundit je dragulj koji olakšava rukovanje autorizacijom u Rails aplikacijama. Slijedi princip držanja logike autorizacije odvojeno od vaših modela i kontrolera, što je odlična praksa za održavanje vašeg koda čistim i održavanim.

Linear Guide Rail TypesGHH-CA Linear Guide suppliers

Početak rada sa Punditom

Prvi korak je da dodate Pundit vašoj Rails aplikaciji. Otvorite svojeSačuvaj fajlovei dodajte sljedeći red:

dragulj 'pundit'

Onda trčibundle installu vašem terminalu. Kada to učinite, morate postaviti Pundit u svojoj aplikaciji. U vašemApplicationController, dodajte sljedeći kod:

class ApplicationController < ActionController::Baza uključuje Pundit rescue_from Pundit::NotAuthorizedError, sa: :user_not_authorized private def user_not_authorized flash[:alert] = "Niste ovlašteni za izvođenje ove akcije." redirect_to(request.referrer || root_path) end end

Ovaj kod uključuje modul Pundit u vašemApplicationControlleri postavlja blok spašavanja kada korisnik pokuša izvršiti radnju za koju nije ovlašten.

Kreiranje politika

Politike su u srcu Pundita. Oni su mjesto gdje definirate pravila autorizacije za svoju aplikaciju. Za kreiranje politike, možete koristiti Rails generator. Na primjer, ako imate aProizvodmodel, možete kreirati politiku za njega ovako:

šine stvaraju pundit:policy proizvod

Ovo će kreirati datoteku pod nazivomproduct_policy.rbuaplikacija/politikeimenik. Otvorite ovu datoteku i vidjet ćete osnovnu strukturu poput ove:

class ProductPolicy < ApplicationPolicy def indeks? false end def show? false end def kreirati? lažni kraj def novo? kreirati? završiti ažuriranje definicije? false end def edit? ažurirati? end def uništiti? lažni kraj kraja

Ove metode predstavljaju različite radnje koje korisnik može pokušati izvršiti na aProizvod. Podrazumevano, svi se vraćajufalse, što znači da niko nije ovlašten za obavljanje ovih radnji. Morate prilagoditi ove metode na osnovu zahtjeva vaše aplikacije.

Na primjer, recimo da samo administratori mogu kreirati, ažurirati i uništavati proizvode, ali svi korisnici mogu vidjeti listu i detalje proizvoda. Politiku možete modificirati na sljedeći način:

class ProductPolicy < ApplicationPolicy def indeks? true end def show? true end def kreirati? user.admin? kraj def novo? kreirati? završiti ažuriranje definicije? user.admin? end def edit? ažurirati? end def uništiti? user.admin? kraj kraj

U ovom kodu,korisnikvarijabla predstavlja trenutno prijavljenog korisnika. Theadmin?Pretpostavlja se da je metoda metoda naKorisnikmodel koji se vraćaistinaako je korisnik admin.

Korištenje politika u kontrolerima

Nakon što kreirate svoja pravila, možete ih koristiti u svojim kontrolerima. Na primjer, u vašemProductsController, možete dodati sljedeći kod:

class ProductsController < ApplicationController def index @products = Product.all autoriziraj @products end def show @product = Product.find(params[:id]) autoriziraj @product end def new @product = Product.new autoriziraj @product end def create @product = Product.new(product_params) autoriziraj @product ako je @product.save preusmjeravanje uspješno kreirano:_to 'obavještenje o @proizvodu, else render :new end end def edit @product = Product.find(params[:id]) autoriziraj @product end def update @product = Product.find(params[:id]) autoriziraj @product if @product.update(product_params) redirect_to @product, obavijest: 'Proizvod je uspješno ažuriran.' else render :edit end end def uništi @product = Product.find(params[:id]) autorizuje @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

TheautorizovatiMetoda se poziva u svakoj radnji da provjeri da li je trenutni korisnik ovlašten za izvođenje te akcije. Ako korisnik nije ovlašten, Pundit će podići aPundit::NotAuthorizedError, koji će biti uhvaćen od stranekorisnik_nije_ovlaštenmetoda uApplicationController.

Scoped Policies

Ponekad ćete možda htjeti ograničiti listu resursa kojima korisnik može pristupiti. Na primjer, možda imate sistem u kojem korisnici mogu vidjeti samo proizvode koje su sami kreirali. Pundit vam omogućava da definirate politike opsega za ovu svrhu.

Prvo kreirajte klasu opsega za svoj model. ZaProizvodmodel, možete kreirati aProductPolicy::Scoperazred ovako:

class ProductPolicy < ApplicationPolicy class Scope < Opseg def resolve if user.admin? scope.all else scope.where(user_id: user.id) end end end # Druge metode politike... end

Urešitimetoda, 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 kreirali.

Zatim, u vašemProductsController, možete koristiti politiku opsega ovako:

class ProductsController < ApplicationController def index @products = policy_scope(Product) authorize @products end # Ostale akcije kontrolera... end

Thepolicy_scopemetoda vraća relaciju opsega zasnovanu na politici opsega koju ste definirali.

Zaključak

Korištenje Pundit-a za autorizaciju u Hgr Rails aplikacijama je odličan način da vaš kod bude organiziran i siguran. Odvajanjem vaše logike autorizacije u politike, možete lako upravljati ko 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 raspravu o kupovini. Tu smo da vam pružimo visokokvalitetne proizvode i odličnu uslugu.

Reference

  • Zvanična dokumentacija stručnjaka
  • Rails Vodiči o autorizaciji
Pošaljite upit