Rumah > Soal Jawab > teks badan
Salam semua, saya terperangkap dalam proses pembelajaran polisi laravel Saya tahu perbezaan antara polisi laravel dan perisian tengah, tetapi saya masih tidak tahu bagaimana untuk menggunakan polisi itu banyak,
Ini adalah jawapan imej tentang dasar yang saya temui di stackoverflow, http://stackoverflow.com/ques...
Maka ini adalah kod yang saya simpan di github semasa saya berlatih Jika ada sesiapa yang sudi menambah fungsi dasar pada kod saya, saya amat berterima kasih. Anda boleh menggunakan dasar untuk melakukan sebarang fungsi, asalkan anda menambahkan dasar padanya
https://github.com/GoogleYY/s...
PHP中文网2017-05-16 16:50:50
Gate
boleh digunakan bersama, ia tidak rumit. Policy
didaftarkan dalam AuthServiceProvider Jika anda mendaftarkan AccountPolicy::class => keizinan. Tambah, padam, ubah suai dan semak
Model
Akaun
. Policy
和Gate
结合起来使用就行,不复杂。Policy
的注册在AuthServiceProvider里,如注册一个AccountPolicy::class => Account::class
,就表示当前User
是否有权限对Account
这个Model
进行增删改查。
在AccountPolicy
针对增删改查操作写上授权逻辑,如针对Delete
操作写上$user->id === $account->user_id
授权逻辑。
如何触发这个授权逻辑呢?可以使用Model Event
触发,如在EventServiceProvider::boot()
里
Event::listen('eloquent.deleting: *', function (Model $model) {
if(Gate::denies('delete', $object)) {
throw new ForbiddenHttpException("You donot have permission delete {get_class($model)}.");
}
})
Gate与Policy的关系类似于Route与Controller的关系。
AccountPolicy
, tulis logik kebenaran untuk menambah, memadam, mengubah suai dan menyemak operasi, seperti $user->id === $account-> kod> operasi user_id
Logik kebenaran. 🎜
🎜Bagaimana untuk mencetuskan logik kebenaran ini? Ia boleh dicetuskan menggunakan Model Event
, seperti dalam EventServiceProvider::boot()
🎜
rrreee
🎜巴扎黑2017-05-16 16:50:50
Selepas bantuan e-mel daripada master stackoverflow asing Amit Gupta, ia kini diselesaikan.
Langkah 1: Daftar dahulu polisi dan wujudkan hubungan sambungan antara Model dan dasar dalam AuthServiceProvider.php di bawah folder Providers, seperti berikut:
protected $policies = [
\App\Models\Role::class => \App\Policies\RolePolicy::class,
\App\Models\Permission::class => \App\Policies\PermissionPolicy::class,
];
Langkah kedua ialah membuat PermissionPolicy baharu melalui perintah php artisan make:policy, dan tulis kawalan kebenaran yang berkaitan ke dalam dua dasar melalui fungsi, seperti ditunjukkan di bawah:
class PermissionPolicy
{
public function before($user, $ability) {
if ($user->hasRole('admin')) {
return true;
}
}
public function create(\App\Models\User $user, \App\Models\Permission $permission)
{
return $user->hasPermission('permission.create');
}
}
Langkah terakhir ialah menggunakan fungsi berkaitan yang ditetapkan oleh dasar ini dalam pengawal, seperti berikut:
class PermissionController extends Controller {
public function create() {
$this->authorize('create', new \App\Models\Permission);
return view('permissions.create');
}
}