Показывает ошибку при использовании фасада ворот - PullRequest
0 голосов
/ 28 мая 2019

При записи прав и прав пользователя отображается сообщение об ошибке: 403 Forbidden

Код контроллера

class IndexController extends AdminController
{
    public function __construct(){

        parent::__construct();

        if (Gate::denies('VIEW_ADMIN')) {
            abort(403);
        }

        $this->template = env('THEME').'.admin.index';
 }

Код AuthServiceProvider

public function boot()
{
    $this->registerPolicies();

   Gate::define('VIEW_ADMIN', function($user){
        return $user->canDo('VIEW_ADMIN');
    });

    //
}

Модель Код пользователя

Модель User связана с моделью Roles, а модель Roles связана с моделью Permission.

public function canDo($permission, $require = FALSE){

    if (is_array($permission)) {
        dump($permission);
    }
    else{
        foreach ($this->roles as $role) {
           foreach ($this->permissions as $permission) {
               if (str_is($permission,$permission->name)) {
                   return true;
               }
           }
        }
    }        
}

1 Ответ

0 голосов
/ 28 мая 2019

Вы переписываете ввод $permission в строке foreach ($this->permissions as $permission) {, поэтому ваш if (str_is($permission,$permission->name)) всегда ЛОЖЬ

, потому что

str_is(array(), 'VIEW_ADMIN') === FALSE

Вы должны сделать это

public function canDo($permission, $require = FALSE){

    if (is_array($permission)) {
        dump($permission);
    }
    else{
        foreach ($this->roles as $role) {
           foreach ($this->permissions as $permissionObject) {
               if (str_is($permission,$permissionObject->name)) {
                   return true;
               }
           }
        }
    }        
}

Также вам следует добавить return FALSE , поскольку тип возвращаемого значения boolean в этом случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...