suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Suchen Sie nach einem vollständigen Code zur tatsächlichen Anwendung der Laravel-Richtlinie

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

黄舟黄舟2778 Tage vor492

Antworte allen(2)Ich werde antworten

  • PHP中文网

    PHP中文网2017-05-16 16:50:50

    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的关系。

    Antwort
    0
  • 巴扎黑

    巴扎黑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');
        }
    }

    Antwort
    0
  • StornierenAntwort