访问Auth :: user()上的控制器函数;

时间:2016-08-17 03:42:48

标签: laravel authentication laravel-5.2

我使用脚手架工具为我的laravel项目生成我的身份验证代码。我创建了一个UserController来创建一个很好用的配置文件页面但是当我尝试创建一个可以在Auth :: user()上使用的函数时,我收到错误Call to undefined method Illuminate\Database\Query\Builder::admin()

为什么Auth :: user()上无法访问管理功能?这不是扩展我的UserController吗?或者我将它与模型混合在一起?该模型是否是检查我的用户是否为管理员的好地方?

这是我的用户控制器

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Auth;
use App\Http\Requests;

class UserController extends Controller
{

    /**
     * Create a new user controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    }

    /**
     * @return View with user data
     */
    public function index() {
        $user = Auth::user();

        return view('users.index', compact('user'));
    }

    /**
     * @return bool
     * Returns bool if the user is an admin.
     */
    public function admin() {
        $user = Auth::user();

        $authorized_users = [
            'admin@test.com'
        ];

        return array_key_exists($user->email, $authorized_users);
    }
}

我在不同的路由控制器功能上调用它

public function index() {
    return Auth::user()->admin();
}

我对laravel和php相当新,所以任何批评都是有价值的,并且需要!

2 个答案:

答案 0 :(得分:0)

不,Auth::user()不会扩展任何Controller。它表示当前登录/验证用户的实例。它将允许您检索其他使用属性,例如idnameAuth::user()->admin();没有任何意义。 Auth::user()UserController或任何其他控制器无关。

答案 1 :(得分:0)

您可以向用户模型添加函数或属性,我更喜欢属性:

//User.php
class User extends Model{
    protected $appends = ['is_admin'];
    public function getIsAdminAttribute()
    {
        $user = Auth::user();

        $authorized_users = [
            'admin@test.com'
        ];

        return array_key_exists($user->email, $authorized_users);
    }
    ...
}
//Then in your view 
Auth::user()->is_admin