Suchen Sie nach einem vollständigen Code zur tatsächlichen Anwendung der Laravel-Richtlinie
黄舟
黄舟 2017-05-16 16:48:50
0
2
488

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...

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

Antworte allen(2)
洪涛

PolicyGate结合起来使用就行,不复杂。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的关系。

巴扎黑

经过国外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');
    }
}
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage