app/Passport/Token.php
<?php
namespace App\Passport;
use App\Models\User;
use Laravel\Passport\Passport;
use Laravel\Passport\Token as PassportToken;
class Token extends PassportToken
{
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'oauth_access_tokens';
/**
* The "type" of the primary key ID.
*
* @var string
*/
protected $keyType = 'string';
/**
* Indicates if the IDs are auto-incrementing.
*
* @var bool
*/
public $incrementing = false;
/**
* The guarded attributes on the model.
*
* @var array
*/
protected $guarded = [];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'scopes' => 'array',
'revoked' => 'bool',
];
/**
* The attributes that should be mutated to dates.
*
* @var array
*/
protected $dates = [
'expires_at',
];
/**
* Indicates if the model should be timestamped.
*
* @var bool
*/
public $timestamps = false;
/**
* Get the client that the token belongs to.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function client()
{
return $this->belongsTo(Client::class, 'client_id', 'id');
}
/**
* Get the user that the token belongs to.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function user()
{
$provider = config('auth.guards.api.provider');
return $this->belongsTo(User::class, 'user_id', 'uuid');
}
/**
* Determine if the token has a given scope.
*
* @param string $scope
* @return bool
*/
public function can($scope)
{
if (in_array('*', $this->scopes)) {
return true;
}
$scopes = Passport::$withInheritedScopes
? $this->resolveInheritedScopes($scope)
: [$scope];
foreach ($scopes as $scope) {
if (array_key_exists($scope, array_flip($this->scopes))) {
return true;
}
}
return false;
}
/**
* Resolve all possible scopes.
*
* @param string $scope
* @return array
*/
protected function resolveInheritedScopes($scope)
{
$parts = explode(':', $scope);
$scopes = [];
for ($i = 0; $i <= count($parts); $i++) {
$scopes[] = implode(':', array_slice($parts, 0, $i));
}
return $scopes;
}
/**
* Determine if the token is missing a given scope.
*
* @param string $scope
* @return bool
*/
public function cant($scope)
{
return ! $this->can($scope);
}
/**
* Revoke the token instance.
*
* @return bool
*/
public function revoke()
{
return $this->forceFill(['revoked' => true])->save();
}
/**
* Determine if the token is a transient JWT token.
*
* @return bool
*/
public function transient()
{
return false;
}
/**
* Get the route key for the model.
*
* @return string
*/
public function getRouteKeyName()
{
return 'uuid';
}
public function getKeyName()
{
return 'uuid';
}
}