Laravel 5.3:无法访问管理仪表板

时间:2016-10-20 10:49:08

标签: php database laravel model

任何人都可以帮我解决问题吗?

我在Laravel创建了一个区域,用户可以根据自己的角色登录。

使用artisan命令创建auth,到目前为止非常简单。

然后,我开始更改数据库中表'users'的表名和主键。 完成此操作后,需要更新用户模型(由artisan命令自动生成),并让模型知道表'用户'的确切位置,以及哪一个是该表的主键。

protected $table = 'users';
protected $primaryKey = 'userID';

在此之后,一旦我进入浏览器并进行正常登录,它就不允许我访问管理仪表板,并且我得到 试图获取非属性的提示对象

这是因为一旦表格和主键像我之前所做的那样改变了,“ $ this ”就不再存在于对象上下文中。

我怎样才能让它发挥作用?

user.php的:

class User extends Authenticatable
{


(...) public function isAdmin(){


        if($this->roles->Role_Type  == "Admin" && $this->is_active == 1){        //this one is the line 83 where the error is


            return true;

        }


        return false;



    }




 (...)

}

2 个答案:

答案 0 :(得分:1)

此代码中有错误

$this->roles->Role_Type

" $这 - >角色"返回与该用户对应的角色,然后取得字段" Role_Type"。

在您的场景中,该用户没有附加任何角色。

所以这" $ this->角色"返回null。

所以你无法取值" Role_Type"。这会导致错误。

您必须执行以下操作

if($this->roles != null && $this->roles->Role_Type && $this->is_active == 1) {        
    return true;
} else {
    return false;
}

注意:您的代码可以使用一个关系。

Class User extends Model
{
    public function roles()
    {
        return $this->hasOne('App\Role');
    }
}

如果您想以有效的方式使用角色和权限,请尝试使用此程序包https://github.com/romanbican/roles

答案 1 :(得分:0)

它以这种方式工作:

进入数据库并删除了表之间建立的强关系(FK),它们对开发人员来说总是很痛苦,需要更多代码才能将它们放在那里。

感谢大家的帮助,而下面是使用和运行良好的代码:

<?php

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */

    //
    protected $table = 'users';
    protected $primaryKey = 'userID';

    protected $fillable = [
        'name',
        'email',
        'password',
        'roleID',
        'photoID',
        'is_active'
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];



    public function role(){

        return $this->belongsTo('App\Role', 'roleID');


    }



    public function photo(){


        return $this->belongsTo('App\Photo', 'photoID');


    }




//    public function setPasswordAttribute($password){
//
//
//        if(!empty($password)){
//
//
//            $this->attributes['password'] = bcrypt($password);
//
//
//        }
//
//
//        $this->attributes['password'] = $password;
//
//
//
//
//    }



    public function isAdmin(){


        if($this->role->Role_Type  == "Admin" && $this->is_active == 1){


            return true;

        }


        return false;



    }



    public function posts(){


        return $this->hasMany('App\Post');


    }



    public function getGravatarAttribute(){


        $hash = md5(strtolower(trim($this->attributes['email']))) . "?d=mm&s=";
        return "http://www.gravatar.com/avatar/$hash";


    }





}