2015-06-08 35 views
1

我只想给新注册的用户分配一个角色。我如何在Entrust的Laravel 5中实现这一点?我正在使用Entrust来获取角色和权限。如何在委托中分配默认用户角色?

上次我尝试在用户注册供应商文件夹中的文件后触发事件。有没有办法在不修改供应商文件夹内的任何内容的情况下触发角色分配事件?

如果是,那么我应该在哪里发生事件?我不想修改供应商文件夹内的任何内容,例如postRegister()中的触发事件AuthenticatesAndRegistersUsers.php,因为新更新会覆盖我的代码。

此链接上的代码看起来不错,但我不知道委托是否有注册事件。 http://laravel.io/forum/07-02-2014-entrust-assign-role-on-user-signup

这里是我的代码在routes.php文件:

// this event is firing on user login and i am getting user object 
Event::listen('auth.login', function($user) { 
    var_dump($user); 
    die(__LINE__); 
}); 

// this event is not firing on user registration 
Event::listen('auth.register', function($user) { 
    var_dump($user); 
    die(__LINE__); 
    // $donor_role = DB::table('app_roles')->where('name', '=', 'donor')->pluck('id'); 
    // $user->roles()->attach($donor_role); 
    // return false; 
}); 

请帮助我。

回答

1

我想通了全部由我自己。这是我如何实现:

我复制的postRegister从/vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesAndRegistersUsers.php()函数和覆盖/应用/ HTTP /控制器/认证/ AuthController.php进行了一些修改。

这里是AuthController.php修改的功能:

public function postRegister(Request $request) { 
    $validator = $this->registrar->validator($request->all()); 
    if ($validator->fails()) { 
     $this->throwValidationException(
       $request, $validator 
     ); 
    } 
    $this->auth->login($this->registrar->create($request->all())); 
    // little modification :-) 
    \Event::fire('auth.assign_default_role', $this->auth->user()); 
    return redirect($this->redirectPath()); 
} 

这里是在routes.php文件的事件监听器:

Event::listen('auth.assign_default_role', function($user) { 
    $donor_role = DB::table('app_roles')->where('name', '=', 'donor')- >pluck('id'); 
    $user->roles()->attach($donor_role); 
    return false; 
}); 
+0

您的解决方案给我'调用一个成员函数的角色( )在'routes.php'上的null上 –

0

您可以从正在处理实际注册的控制器中触发注册事件。

Event::fire('auth.register', array($user)); 
3

应用程序\服务\ Registrar.php 这是我的方式:

public function create(array $data) 
    { 
     $create = User::create([ 
      'username' => $data['username'], 
      'email' => $data['email'], 
      'password' => $data['password'], 
     ]); 


     $user = User::find($create->id); 

     $role = Role::where('name', '=', 'user')->firstOrFail(); 

     $user->roles()->attach($role->id); 

     return $create; 
    } 
相关问题