Luca
Luca

Reputation: 281

Access a controller function on Auth::user();

I used the scaffolding tools to generate my authentication code for my laravel project. I created a UserController to make a profile page which works great but when I try to make a function that can be used on Auth::user() i get an error Call to undefined method Illuminate\Database\Query\Builder::admin()

Why isn't the admin function accessible on the Auth::user()? Doesn't that extend my UserController? Or am I mixing it up with the model? Is the the model a good place to check if my user is an admin?

Here is my user controller

<?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 = [
            '[email protected]'
        ];

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

and I am calling it on a different route controller function

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

I am fairly new to laravel and php so any critique is valuable and wanted!

Upvotes: 0

Views: 1640

Answers (2)

Rodrick
Rodrick

Reputation: 95

You could add a function or attribute to you User model, I prefer attributes:

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

        $authorized_users = [
            '[email protected]'
        ];

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

Upvotes: 1

jonju
jonju

Reputation: 2736

No, Auth::user() does not extends any Controller. It represents the instance of the currently logged in/authenticated user. It will allow you retrieve other attributes of the use such as id, name etc Auth::user()->admin(); does not make any sense. Auth::user() has nothing to do with the UserController or any other controller.

Upvotes: 0

Related Questions