Zizaco / entrust的hasRole方法始终返回false

时间:2019-05-30 07:56:26

标签: laravel-5 entrust

在我的使用https://github.com/Zizaco/entrust的lasravel 5.7应用程序中,使用hasRole方法存在问题,因为它总是返回false,即使在db中,我也有有效的行。 调用控件app / Http / Controllers / PersonalController.php包装的方法:

public function get($id)
{
    $user            = User::find($id);
    $check_roles_as_text= $user->checkRolesAsText();
...

app / User.php:

<?php

namespace App;

use Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;

use Illuminate\Auth\Passwords\CanResetPassword;
use Zizaco\Entrust\Traits\EntrustUserTrait;

class User extends Authenticatable implements JWTSubject
{
    use EntrustUserTrait;

    use Notifiable;
    protected $primaryKey = 'id';

   public function checkRolesAsText() {
        $arr= [];
        echo '<pre>$this->id::'.print_r($this->id,true).'</pre>'; // that shows 5 - my logged user
        // dd($this); // If uncomment out put below
        if ( $this->hasRole(ACCESS_ROLE_ADMIN) ) {
            $arr[]= ACCESS_ROLE_ADMIN_LABEL;
            echo '-1';
        }
        if ( $this->hasRole(ACCESS_ROLE_MANAGER) ) {
            $arr[]= ACCESS_ROLE_MANAGER_LABEL;
            echo '-2';
        }
        if ( $this->hasRole(ACCESS_ROLE_CUSTOMER) ) {
            $arr[]= ACCESS_ROLE_CUSTOMER_LABEL;
            echo '-3';
        }
        echo '<pre>$arr::'.print_r($arr,true).'</pre>';
        return $this->concatArray($arr);
    }
}

检查slq跟踪记录,我发现user_id为null:

   SELECT `ad_roles`.*, `ad_role_user`.`user_id`     AS `pivot_user_id`, `ad_role_user`.`role_id`     AS `pivot_role_id` 
    FROM `ad_roles` 
    INNER JOIN `ad_role_user` on `ad_roles`.`id` = `ad_role_user`.`role_id` 
    WHERE `ad_role_user`.`user_id` is null 

dd($ this)的输出:

User {#368 ▼
  #primaryKey: "id"
  #connection: "mysql"
  #table: "users"
  #keyType: "int"
  +incrementing: true
  #with: []
  #withCount: []
  #perPage: 15
  +exists: true
  +wasRecentlyCreated: false
  #attributes: array:19 [▼
    "id" => 5
    "username" => "Admin"
    "email" => "admin@mail.com"
    "password" => "$2y$10$vxBkNOEteK5GwP/j1VEDiutmR92XVW1ixSEEQ5ZMq6WPY4RkAO97S"
    "remember_token" => null
    "status" => "A"
    "account_type" => "I"
    "verified" => 1
    "verification_token" => null
    "first_name" => "Red"
    "last_name" => "Song"
    "phone" => "247-541-7172"
    "website" => "red_song@make_vote.site.com"
    "notes" => null
    "creator_id" => null
    "activated_at" => null
    "avatar" => "5.jpeg"
    "created_at" => "2018-03-25 12:39:36"
    "updated_at" => "2018-05-20 19:48:03"
  ]
  #original: array:19 [▶]
  #changes: []
  #casts: []
  #dates: []
  #dateFormat: null
  #appends: []
  #dispatchesEvents: []
  #observables: []
  #relations: []
  #touches: []
  +timestamps: true
  #hidden: []
  #visible: []
  #fillable: []
  #guarded: array:1 [▶]
  #rememberTokenName: "remember_token"

我看不到为什么在SQL中user_id为null以及如何解决?

谢谢!

0 个答案:

没有答案