Heim > Fragen und Antworten > Hauptteil
Hallo zusammen, ich bin gerade dabei, die Laravel-Richtlinie zu lernen, aber ich weiß immer noch nicht, wie ich die Richtlinie anwenden soll. Vielen Dank viel,
Dies ist eine Bildantwort zu Richtlinien, die ich auf Stackoverflow gefunden habe, http://stackoverflow.com/ques...
Dann ist dies der Code, den ich beim Üben auf Github gespeichert habe. Wenn jemand bereit wäre, die Richtlinienfunktion zu meinem Code hinzuzufügen, wäre ich sehr dankbar. Sie können die Richtlinie für jede Funktion verwenden, solange Sie die Richtlinie hinzufügen
https://github.com/GoogleYY/s...
PHP中文网2017-05-16 16:50:50
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的关系。
巴扎黑2017-05-16 16:50:50
经过国外stackoverflow大神Amit Gupta的邮件帮助,现在解决了。
第一步:首先注册policy,在Providers文件夹下的AuthServiceProvider.php里建立Model与policy之间的连接关系,如下:
protected $policies = [
\App\Models\Role::class => \App\Policies\RolePolicy::class,
\App\Models\Permission::class => \App\Policies\PermissionPolicy::class,
];
第二步,通过php artisan make:policy 指令分别新建PermissionPolicy,并且把相关权限操控通过函数的方式写进这两个policy下面,如下所示:
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');
}
}
最后一步是在控制器里使用这个policy所设定的相关功能,如下:
class PermissionController extends Controller {
public function create() {
$this->authorize('create', new \App\Models\Permission);
return view('permissions.create');
}
}