laravel Gate 权限 关联模型 嵌套

发布于 2022-09-11 16:42:06 字数 1275 浏览 41 评论 0

在使用larave 的gate做权限验证的时候
Admin_users(用户表) Admin_roles(角色表) Admin_permissions(权限表) 都是多对多关系

首先,在App/providers/AuthServiceProvider 中注册gate

$permissions=AdminPermission::all();
        foreach ($permissions as $permission){
            //$AdminUser为当前的用户对象
            Gate::define($permission->name,function($AdminUser) use ($permission){
                return $AdminUser->hasPermission($permission);
            });
        }

AdminUser.php中hasPermission()代码

代码说明 relRole为AdminUser中定义的模型关联,关联到Admin_roles表
relPermission 为AdminRole中定义的模型关联,关联到Admin_permissions表
这段代码是一个模型的嵌套关联, 目的就是为了获取当前用户拥有的权限
    // 当前用户是否有某个权限
    public function hasPermission($permission){
        //获取当前用户的所有权限
        $allPermission=$this->with(['relRole.relPermission'])->find($this->id);
        dd($allPermission);
        return !! $allPermission->contains($permission);
    }

目前的问题:
我本身想获取用户的全部权限和当前权限进行比对,但是现在有两个问题
1.权限散落不同的角色数据下.
2.用集合的contains()方法进行判断时,提示函数不存在,因为它本身不是一个集合.

附获取的$allPermision数据

clipboard.png

根据用户 获取该用户所有的权限 ,并判断当前权限是否在用户的权限中,这段业务逻辑,我该怎么修改我的代码了,多谢大家指正

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文