首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel使用模型,并返回“在没有对象上下文时使用$this”AzureUser模型的第28行

Laravel使用模型,并返回“在没有对象上下文时使用$this”AzureUser模型的第28行
EN

Stack Overflow用户
提问于 2022-01-02 05:50:14
回答 1查看 547关注 0票数 0

我想在拉拉维尔创造一扇门。这样做的目的是检查一个角色是否存在于AzureAD访问令牌上。

到目前为止我有这个

代码语言:javascript
复制
Gate::define('admin_cml', function () {
   $roles = AzureUser::roles();
   return in_array(config('app-roles.cml_admin'),$roles);
});

到目前为止,响应是“在对象上下文中不使用$this”。

这是完整的代码

AuthServiceProvider ->路径应用程序\提供者

代码语言:javascript
复制
<?php

namespace App\Providers;
use App\Models\AzureUser;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Gate;
class AuthServiceProvider extends ServiceProvider
{
    /**
     * The policy mappings for the application.
     *
     * @var array<class-string, class-string>
     */
    protected $policies = [
        // 'App\Models\Model' => 'App\Policies\ModelPolicy',
    ];

    /**
     * Register any authentication / authorization services.
     *
     * @return void
     */
    public function boot()
    {
        $this->registerPolicies();
        Gate::define('admin_cml', function () {
            $roles = AzureUser::roles();
            return in_array(config('app-roles.cml_admin'),$roles);
        });
    }
}

AzureUser Model ->应用程序模型

代码语言:javascript
复制
<?php
namespace App\Models;
use Laravel\Socialite\Facades\Socialite;
use Illuminate\Database\Eloquent\Model;

class AzureUser extends Model
{
 
        protected $id_token;
        protected $access_token;
        protected $user;
    
        public function __construct($access_token, $id_token)
        {
            $this->access_token = $access_token;
            $this->id_token = $id_token;
    
            $this->user = Socialite::driver('azure-oauth')->userFromToken($access_token);
        }
    
        public function get()
        {
            return $this->user;
        }
    
        public function roles()
        {
            $tokens = explode('.', $this->id_token);
    
            return json_decode(static::urlsafeB64Decode($tokens[1]))->roles;
        }
    
        public static function urlsafeB64Decode($input)
        {
            $remainder = strlen($input) % 4;
    
            if ($remainder) {
                $padlen = 4 - $remainder;
                $input .= str_repeat('=', $padlen);
            }
    
            return base64_decode(strtr($input, '-_', '+/'));
        }
    
}

路由

代码语言:javascript
复制
<?php
use App\Http\Controllers\loginController;
use Illuminate\Support\Facades\Route;
use Laravel\Socialite\Facades\Socialite;

Route::get('/', function () {
    if(Auth::check()){
        return redirect()->route('app');
    }
    return view('welcome');
})->name('home');

Route::get('/app',function(){
    return view('layouts.app');
})->name('app')->middleware('auth');

// user routes
Route::prefix('user')->group(function () {
    Route::get('/login', [loginController::class,'login'])->name('login');

    Route::get('/logout', [loginController::class,'logout'])->name('logout');
});

Route::group(['middelware'=>['auth'],'prefix'=>'adminmm','as'=>'adminmm.'],function () {
    Route::get('/carros', function(){
        return "carros";
    })->name('carros');

    Route::get('/companias', function(){
        return "companias";
    })->name('companias');
});

// Here is the error. When going to admincml/mecanicos is when the error is showing up
Route::group(['middelware'=>['auth'],'prefix'=>'admincml','as'=>'admincml.'],function () {
    Route::get('/mecanicos', function(){
        if (! Gate::allows('admin_cml')) {
            abort(403);
        }
        return "mecanicos";
    })->name('mecanicos');
});

有什么想法吗?为什么没有发现模型?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2022-05-16 10:53:11

该错误来自于AuthServiceProvider,您在其中使用了对方法的静态调用,但它不是静态调用.

代码语言:javascript
复制
AzureUser::roles();

您似乎希望在那里使用$this实例变量,因此您必须在AuthServiceProvider.php中为它创建一个实例:

代码语言:javascript
复制
use App\AzureUser;

$azure = new AzureUser();
$roles = $azure->role();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70553886

复制
相关文章

相似问题

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