首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >spatie/laravel-权限-门和hasPermissionTo不工作

spatie/laravel-权限-门和hasPermissionTo不工作
EN

Stack Overflow用户
提问于 2019-09-25 08:10:09
回答 1查看 6.4K关注 0票数 1

我和spatie/laravel-permissions有个问题..。

我在AuthServiceProvider.php中使用AuthServiceProvider.php定义Superadmin (可以绕过所有权限而不将其注册到角色).

它与can('the-permission')助手完美地工作在一起。

但它不适用于Auth::user()->hasPermissionTo('the-permission').

下面是我的代码:

AuthServiceProvider.php

代码语言:javascript
复制
public function boot()
{
    $this->registerPolicies();

    Gate::before(function ($user, $ability) {
        $superadmin_rolename = 'Superadmin';
        $guard_name = 'web-admin';
        return $user->hasRole($superadmin_rolename , $guard_name ) ? true : null;
    });
}

在刀片中:

代码语言:javascript
复制
@can('add products')
    <button type="submit">Add Product</button>
@endcan

// this will work perfectly, the button will be shown

主计长:

代码语言:javascript
复制
public function addProduct()
{
    $admin = Auth::guard('web-admin')->user();

    if($admin->hasPermissionTo('add products')) return true;

    return false;
}

// this is not working (it return false)... i dont know why.... it should return true....

所以,正如我上面向你们展示的那样:

我使用superadmin

  • the $user->can()

  • but定义Gate超级管理员应该授予所有access

  • ,它与can()can()完美地工作,而不是与$user->hasPermissionTo()一起工作

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-25 09:26:23

基于@Remul的评论,我发现只有can()$user->can()才能与Gate::before完美地合作.

那么,如果我想使用另一种方法,如$user->hasAnyPermission$user->hasAllPermissions

这就是我要做的.我决定在Admin模型中创建一个自定义方法。

代码语言:javascript
复制
<?php

namespace Model;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles;

class Admin extends Authenticatable
{
    use HasRoles;

    protected $guard_name = "web-admin";

    protected $fillable = ['name', 'email', 'password'];

    public function canAny(array $permissions)
    {
        foreach($permissions as $e){
            if($this->can($e)) return true;
        }

        return false;
    }

    public function canAll(array $permissions)
    {
        foreach($permissions as $e){
            if(!$this->can($e)) return false;
        }

        return true;
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58093970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档