无法将默认用户角色分配给新用户

阿布舍克·塔库尔

错误信息:

Call to undefined method App\User::roles()

我正在尝试为新用户分配默认角色但我未能分配它。所有用户信息都存储在数据库中,但角色不能存储在表中。我在这段代码中出错的地方。帮帮我。我的英语不好,很抱歉错过交流。

这是我的 User.php、Role.php、RegisterController.php 和 HomeController.php 文件的代码。看看并告诉我“我哪里做错了?”

这是 User.php 文件

    namespace App;
    use App\Role;
    use Illuminate\Notifications\Notifiable;
    use Illuminate\Contracts\Auth\MustVerifyEmail;
    use Illuminate\Foundation\Auth\User as Authenticatable;

    class User extends Authenticatable
    {
        use Notifiable;
        /**
        * @param string|array $roles
        */
        public function authorizeRoles($roles)
        {
          if (is_array($roles)) {
              return $this->hasAnyRole($roles) || 
                     abort(401, 'This action is unauthorized.');
          }
          return $this->hasRole($roles) || 
                 abort(401, 'This action is unauthorized.');
        }
        /**
        * Check multiple roles
        * @param array $roles
        */
        public function hasAnyRole($roles)
        {
          return null !== $this->roles()->whereIn('name', $roles)->first();
        }
        /**
        * Check one role
        * @param string $role
        */
        public function hasRole($role)
        {
          return null !== $this->roles()->where('name', $role)->first();
        }  
        /**


  * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

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

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
}

这是 Role.php 文件

 <?php

namespace App;
use App\User;
use Illuminate\Database\Eloquent\Model;

class Role extends Model
{
    public function users()
    {
      return $this->belongsToMany(User::class);
    }
}

这个 RegisterController.php 文件。

    <?php

    namespace App\Http\Controllers\Auth;
    use App\Role;
    use App\User;
    use App\Http\Controllers\Controller;
    use Illuminate\Support\Facades\Hash;
    use Illuminate\Support\Facades\Validator;
    use Illuminate\Foundation\Auth\RegistersUsers;

    class RegisterController extends Controller
    {
        /*
        |--------------------------------------------------------------------------
        | Register Controller
        |--------------------------------------------------------------------------
        |
        | This controller handles the registration of new users as well as their
        | validation and creation. By default this controller uses a trait to
        | provide this functionality without requiring any additional code.
        |
        */

        use RegistersUsers;

        /**
         * Where to redirect users after registration.
         *
         * @var string
         */
        protected $redirectTo = '/home';

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

        /**
         * Get a validator for an incoming registration request.
         *
         * @param  array  $data
         * @return \Illuminate\Contracts\Validation\Validator
         */
        protected function validator(array $data)
        {
            return Validator::make($data, [
                'name' => ['required', 'string', 'max:255'],
                'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
                'password' => ['required', 'string', 'min:8', 'confirmed'],
            ]);
        }

        /**
         * Create a new user instance after a valid registration.
         *
         * @param  array  $data
         * @return \App\User
         */
         protected function create(array $data)
{
    $user = User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => Hash::make($data['password']),
    ]);

     $user
       ->roles()
       ->attach(Role::where('name', 'student')->first());

    return $user;
    }

这是我的role_user数据库表
用户数据库表
角色数据库表

伊梅蒂

像这样createRegisterController.php文件中重构你的方法

protected function create(array $data)
{
    $user = User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => Hash::make($data['password']),
    ]);

     $user
       ->roles()
       ->attach(Role::where('name', 'student')->first());

    return $user;
}

您的其余代码将不会在return.

像这样添加rolesUser模型的关系

public function roles()
{
    return $this->belongsToMany(User::class);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章