definir role d'utilisateur par defaut
Salut la communauté, vous allez tous bien jespere. Merci deja pour vos eventuelles reponses de mes problemes deja posés. Cependant, jesouhaite maintenant donner un role par defaut à un utilisateur qui vient juste de se connecter. J'ai un role soumissionnaire que je veux affecter à tout utilisateur qui vient juste de se connecter, c'est à dire qu'il ne verra pas que les pages accessibles aux soumissionaire Ma question de savoir la maniere dont je pourrai definir celui ci dans le controller, un role par soumissionnaire defaut Merci davance...........
Salut,
Pour un utilisateur qui vient de se connecter ou de s'enregistrer ?
Pour un utilisateur qui vient de s'enregistrer, vue que le rôle est donné pour une fois par defaut, et que la connexion peut se faire à plusieurs reprises.
Le plus simple est de prévoir une valeur par défaut pour le champ du rôle dans la base de données.
D'accor d'accord.. Dans ce cas, en ce qui concerne le controller du role RoleController et celui de user UserController, les instructions à ajouter je veux dire..
Je tiens à preciser que j'ai plusqu'un role au fait, mais les autres seront crées par l'administrateur, seuls les soumissionnaires pourront s'inscrire sans l'intervention de l'administrateur. Doncil y'aura d'autres roles dans la base de données au prealable.
C'est assez abstrait comme question, on sait même pas comment sont organisées les données dans la base.
D'accord: . Migration de la table users
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
pour la table role
public function up()
{
Schema::create('roles', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('label')->nullable();
$table->timestamps();
});
Schema::create('permissions', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('label')->nullable();
$table->timestamps();
});
Schema::create('permission_role', function (Blueprint $table) {
$table->integer('permission_id')->unsigned();
$table->integer('role_id')->unsigned();
$table->foreign('permission_id')
->references('id')
->on('permissions')
->onDelete('cascade');
$table->foreign('role_id')
->references('id')
->on('roles')
->onDelete('cascade');
$table->primary(['permission_id', 'role_id']);
});
Schema::create('role_user', function (Blueprint $table) {
$table->integer('role_id')->unsigned();
$table->integer('user_id')->unsigned();
$table->foreign('role_id')
->references('id')
->on('roles')
->onDelete('cascade');
$table->foreign('user_id')
->references('id')
->on('users')
->onDelete('cascade');
$table->primary(['role_id', 'user_id']);
});
}
Pour le RoleController
class RolesController extends Controller
{
public function index(Request $request)
{
$keyword = $request->get('search');
$perPage = 15;
if (!empty($keyword)) {
$roles = Role::where('name', 'LIKE', "%$keyword%")->orWhere('label', 'LIKE', "%$keyword%")
->latest()->paginate($perPage);
} else {
$roles = Role::latest()->paginate($perPage);
}
return view('admin.roles.index', compact('roles'));
}
public function create()
{
$permissions = Permission::select('id', 'name', 'label')->get()->pluck('label', 'name');
return view('admin.roles.create', compact('permissions'));
}
public function store(Request $request)
{
$this->validate($request, ['name' => 'required']);
$role = Role::create($request->all());
$role->permissions()->detach();
if ($request->has('permissions')) {
foreach ($request->permissions as $permission_name) {
$permission = Permission::whereName($permission_name)->first();
$role->givePermissionTo($permission);
}
}
return redirect('admin/roles')->with('flash_message', 'Role added!');
}
}
Bonjour,
Lorqu'un utilisateur se connecte/s'enregistre pour la première fois, je lui donne un profil admin si son login est dans la variable ADMINS du .env J'ai donc customisé la fonction "login" dans le Auth/LoginController pour faire ça (dans mon cas, j'utilise le samaccountname parce que j'ai une synchro avec l'annuaire AD) :
public function login(Request $request)
{
$credentials = [
'samaccountname' => $request->samaccountname,
'password' => $request->password,
];
if (Auth::attempt($credentials)) {
if(in_array(strtolower(Auth::user()->samaccountname), explode(',', env('ADMINS')))) {
$user = User::find(Auth::user()->id);
$user->profil_id=1;
$user->save();
}
return redirect()->to('/')->withMessage('Connecté !');
} else {
return redirect()->to('login')->withMessage("Hmm... nom d'utilisateur ou mot de pass incorrect");
}
}
@BarnabéTebda
Tu n'as pas prévu du code pour affecter des rôles aux users ?
Si si. Seulement au niveau de l'administrateur..
Si tu as déjà du code pour affecter un rôle à un utilisateur alors il suffit de modifier RegisterController au niveau de la fonction create pour faire cette affectation par défaut.
D'accord.. C'est ce que j'ai fais ce matin meme. Avec les requetes select et insert..
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
$last_users_Id = DB::table('users')
->select(DB::raw('MAX(id) as max_id'))->get();
foreach($last_users_Id as $key){
$id_max =$key->max_id;
}
DB::table('role_user')->insert(
['role_id' => 1,
'user_id' => $id_max]
);
}
Mais j'ai autre question concernant l'envoi des mails aux soumissionnaires. Je vais changer de sujet.
Il y a plus simple :
protected function create(array $data)
{
$user = User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
DB::table('role_user')->insert(
['role_id' => 1,
'user_id' => $user->id]
);
return $user;
}
Okkk... C'est reglé. Merci infiniment pour tout le temps dont vous m'accordez.
Okkk... C'est reglé. Merci infiniment pour tout le temps dont vous m'accordez.
Vous ne pouvez pas répondre à ce sujet.