Projets Laravel France

definir role d'utilisateur par defaut

  • Avatar de BarnabéTebda
    Membre depuis :
    18/10/2018
    Messages :
    45

    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...........

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2418

    Salut,

    Pour un utilisateur qui vient de se connecter ou de s'enregistrer ?

  • Avatar de BarnabéTebda
    Membre depuis :
    18/10/2018
    Messages :
    45

    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.

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2418

    Le plus simple est de prévoir une valeur par défaut pour le champ du rôle dans la base de données.

  • Avatar de BarnabéTebda
    Membre depuis :
    18/10/2018
    Messages :
    45

    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..

  • Avatar de BarnabéTebda
    Membre depuis :
    18/10/2018
    Messages :
    45

    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.

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2418

    C'est assez abstrait comme question, on sait même pas comment sont organisées les données dans la base.

  • Avatar de BarnabéTebda
    Membre depuis :
    18/10/2018
    Messages :
    45

    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']);
    });
    }
  • Avatar de BarnabéTebda
    Membre depuis :
    18/10/2018
    Messages :
    45

    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!');
    }

    }
  • Avatar de StéphaneBorgne
    Membre depuis :
    03/01/2019
    Messages :
    1

    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");
    }
    }
  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2418

    @BarnabéTebda

    Tu n'as pas prévu du code pour affecter des rôles aux users ?

  • Avatar de BarnabéTebda
    Membre depuis :
    18/10/2018
    Messages :
    45

    Si si. Seulement au niveau de l'administrateur..

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2418

    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.

  • Avatar de BarnabéTebda
    Membre depuis :
    18/10/2018
    Messages :
    45

    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]
    );

    }
  • Avatar de BarnabéTebda
    Membre depuis :
    18/10/2018
    Messages :
    45

    Mais j'ai autre question concernant l'envoi des mails aux soumissionnaires. Je vais changer de sujet.

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2418

    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;
    }
  • Avatar de BarnabéTebda
    Membre depuis :
    18/10/2018
    Messages :
    45

    Okkk... C'est reglé.
    Merci infiniment pour tout le temps dont vous m'accordez.

  • Avatar de BarnabéTebda
    Membre depuis :
    18/10/2018
    Messages :
    45

    Okkk... C'est reglé.
    Merci infiniment pour tout le temps dont vous m'accordez.

Vous ne pouvez pas répondre à ce sujet.