Mengawal perkara yang boleh atau tidak boleh dilakukan oleh pengguna dalam aplikasi anda ialah salah satu perkara paling penting yang perlu anda lakukan semasa membina aplikasi dunia sebenar.
Sebagai contoh, dalam aplikasi todo, anda tidak mahu pengguna boleh mengedit atau memadam todo pengguna lain.
Dalam artikel ini, anda akan mempelajari salah satu cara yang lancar untuk melakukan ini dalam Laravel dengan menggunakan dasar untuk mengawal perkara yang boleh dilakukan pengguna dengan membina aplikasi todo yang mudah.
Untuk mengikuti tutorial ini, anda perlu mempunyai pemahaman asas tentang Laravel dan struktur aplikasinya.
Jalankan arahan berikut untuk mencipta aplikasi Laravel baharu dalam folder yang anda inginkan dan pindah ke dalamnya:
composer create-project laravel/laravel todo-app && cd todo-app
Seterusnya, jalankan arahan berikut untuk memasang Laravel Breeze:
php artisan breeze:install
Breeze akan memperancah aplikasi baharu anda dengan pengesahan supaya pengguna anda boleh mendaftar, log masuk, log keluar dan melihat papan pemuka mereka yang diperibadikan.
Selepas itu, susun aset aplikasi anda dengan menjalankan arahan berikut:
npm install && npm run dev
Laravel disertakan dengan pangkalan data SQLite berasaskan fail secara lalai, jadi perkara seterusnya yang perlu anda lakukan ialah menyambungkan fail pangkalan data aplikasi anda kepada pemapar pangkalan data seperti TablePlus atau mana-mana yang anda suka.
Selepas menyambungkan pangkalan data anda kepada pemapar, jalankan arahan berikut untuk memindahkan jadual yang tersedia ke dalam pangkalan data anda:
php artisan migrate
Setelah itu selesai, jalankan arahan berikut untuk melihat aplikasi anda dalam penyemak imbas:
php artisan serve
Anda kini sepatutnya melihat aplikasi Laravel baharu anda di localhost:8000 kelihatan seperti ini:
Anda kini boleh pergi ke halaman daftar untuk mencipta pengguna dan mengakses papan pemuka, iaitu keseluruhan aplikasi pada ketika ini.
Model dalam Laravel digunakan untuk mengawal jadual pangkalan data. Gunakan arahan berikut untuk mencipta model Todo dalam folder App/Models:
php artisan make:model Todo
Seterusnya, di dalam fail yang baru dibuat, gantikan kelas Todo dengan kod berikut:
class Todo extends Model { use HasFactory; protected $fillable = [ 'title', 'description', 'completed', 'user_id' ]; public function user() { return $this->belongsTo(User::class); } }
Kod di atas akan membolehkan pengguna menyerahkan borang dengan sifat $fillable; ia juga mentakrifkan hubungan antara pengguna dan Todo; dalam kes ini, todo kepunyaan pengguna. Mari lengkapkan persediaan perhubungan dengan menambahkan kod berikut pada fail App/Models/User.php:
public function todos() { return $this->hasMany(Todo::class); }
Kod di atas akan menyambungkan model Pengguna kepada model Todo supaya ia boleh mempunyai banyak tugasan.
Migrasi dalam Laravel digunakan untuk menentukan perkara yang sepatutnya ada dalam jadual pangkalan data. Jalankan arahan berikut untuk mencipta migrasi di dalam folder pangkalan data/penghijrahan:
composer create-project laravel/laravel todo-app && cd todo-app
Seterusnya, gantikan fungsi atas dalam fail baharu dengan yang berikut yang akan menambah jadual todo pada pangkalan data dengan lajur id, user_id, tajuk, perihalan, lengkap dan cap masa:
php artisan breeze:install
Seterusnya, jalankan arahan berikut untuk menambah jadual todos ke pangkalan data:
npm install && npm run dev
Dasar dalam Laravel membolehkan anda menentukan siapa yang boleh melakukan apa dengan sumber tertentu, dalam kes ini, todos.
Mari kita lihat cara ia berfungsi dengan menjana TodoPolicy di dalam folder App/Policies menggunakan arahan berikut:
php artisan migrate
Seterusnya, dalam fail TodoPolicy yang baru dibuat, gantikan kelas TodoPolicy dengan kod berikut:
php artisan serve
Kod di atas menyatakan bahawa pengguna boleh membuat todo, tetapi hanya boleh melihat, mengemas kini atau memadam todo kepunyaan mereka.
Seterusnya, mari sediakan pengawal di bahagian seterusnya.
Pengawal dalam Laravel mengawal kefungsian apl untuk sumber tertentu. Jalankan arahan berikut untuk menjana TodoController di dalam App/Http/Controllers:
php artisan make:model Todo
Tambahkan kod berikut pada bahagian atas fail TodoController yang baru dibuat untuk mengimport model Todo untuk operasi pangkalan data dan kelas Gate untuk kebenaran:
class Todo extends Model { use HasFactory; protected $fillable = [ 'title', 'description', 'completed', 'user_id' ]; public function user() { return $this->belongsTo(User::class); } }
Ganti kaedah indeks dengan kod berikut yang mengambil dan mengembalikan semua tugasan pengguna yang log masuk:
public function todos() { return $this->hasMany(Todo::class); }
Kaedah The Gate::authorize mengesahkan bahawa pengguna telah log masuk menggunakan kaedah viewAny policy yang anda takrifkan dalam bahagian sebelumnya.
Ganti kaedah buat dengan kod berikut yang mengesahkan pengguna telah log masuk sebelum mengembalikan borang buat todo kepada pengguna supaya mereka boleh membuat todos:
php artisan make:migration create_todos_table
Ganti kaedah kedai dengan kod berikut yang menyemak sama ada pengguna boleh membuat todo, mengesahkan permintaan, membuat todo dan mengubah hala pengguna ke halaman senarai todo:
public function up(): void { Schema::create('todos', function (Blueprint $table) { $table->id(); $table->foreignId('user_id')->constrained()->onDelete('cascade'); $table->string('title'); $table->text('description')->nullable(); $table->boolean('completed')->default(false); $table->timestamps(); }); }
Ganti kaedah edit dengan kod berikut yang mengesahkan pengguna boleh mengedit todo itu sebelum mengembalikan borang edit todo yang diisi dengan todo yang dipilih kepada pengguna supaya mereka boleh mengeditnya:
php artisan migrate
Ganti kaedah kemas kini dengan kod berikut yang menyemak sama ada pengguna boleh mengemas kini todo, mengesahkan permintaan, mengemas kini todo yang dipilih dan mengubah hala pengguna ke halaman senarai todo:
php artisan make:policy TodoPolicy --model=Todo
Ganti kaedah musnah dengan kod berikut yang menyemak sama ada pengguna boleh memadamkan todo, memadamkannya dan mengubah hala pengguna ke halaman senarai todo:
class TodoPolicy { /** * Determine if the user can view any todos. */ public function viewAny(User $user): bool { return true; } /** * Determine if the user can view the todo. */ public function view(User $user, Todo $todo): bool { return $user->id === $todo->user_id; } /** * Determine if the user can create todos. */ public function create(User $user): bool { return true; } /** * Determine if the user can update the todo. */ public function update(User $user, Todo $todo): bool { return $user->id === $todo->user_id; } /** * Determine if the user can delete the todo. */ public function delete(User $user, Todo $todo): bool { return $user->id === $todo->user_id; } }
Fail TodoController anda kini sepatutnya kelihatan seperti ini:
composer create-project laravel/laravel todo-app && cd todo-app
Sekarang kaedah TodoController anda sudah siap, anda kini boleh membuat paparan untuk aplikasi anda dengan mencipta folder todos baharu di dalam folder sumber/pandangan. Selepas itu, buat fail create.blade.php, edit.blade.php, index.blade.php dalam folder todos baharu.
Tampal kod berikut di dalam index.blade.php:
php artisan breeze:install
Tampal kod berikut di dalam create.blade.php:
npm install && npm run dev
Tampal kod berikut di dalam edit.blade.php:
php artisan migrate
Mengendalikan laluan untuk TodoController anda agak mudah menggunakan kaedah sumber dalam Laravel. Lakukan itu dengan menambah kod berikut pada penghujung folder route/web.php seperti:
php artisan serve
Kod di atas menggunakan perisian tengah auth untuk melindungi sumber todos. Anda kini sepatutnya boleh melawati laluan berikut dalam aplikasi anda selepas log masuk:
Kini anda boleh membuat, mengedit dan memadam todos, TETAPI hanya sebagai pengguna log masuk dan pemilik todos yang dipilih dalam hal mengedit dan memadam.
Dan itu sahaja! Anda baru sahaja mencipta aplikasi todo realistik yang membenarkan pengguna membuat, melihat, mengedit dan memadam SAHAJA todo mereka sendiri. Sila beritahu saya jika anda mempunyai sebarang pembetulan, cadangan atau soalan dalam ulasan!
Akhir sekali, ingat untuk mengikuti saya di sini di Dev, LinkedIn dan Twitter. Terima kasih banyak kerana membaca, dan jumpa lagi pada yang seterusnya!
Atas ialah kandungan terperinci Keizinan: Memahami Dasar dalam Laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!