求一个关于laravel policy实际运用的完整代码
黄舟
黄舟 2017-05-16 16:48:50
0
2
478

大家好,我在学习laravel policy的过程中卡住了,我知道laravel policy和middleware的区别,但是还不知道具体如何应用policy,版主可以给完整一个小程序过来吗,非常感谢,
这是我在stackoverflow那里找到的关于policy的形象解答,http://stackoverflow.com/ques...

然后这是我自己练手时在github上存储的代码,如果哪位仁兄仁妹肯在我的代码中添加policy功能进去的话,不胜感激。随便你用policy做任何功能都可以,只要添加了policy进去就可以了
https://github.com/GoogleYY/s...

黄舟
黄舟

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

全部回复(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');
    }
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板