Projets Laravel France

definir role d'utilisateur par defaut

Avatar de BarnabéTebda
BarnabéTebda

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

Posté il y a 1 an
Avatar de bestmomo
bestmomo

Salut,

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

Posté il y a 1 an
Avatar de BarnabéTebda
BarnabéTebda

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.

Posté il y a 1 an
Avatar de bestmomo
bestmomo

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

Posté il y a 1 an
Avatar de BarnabéTebda
BarnabéTebda

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

Posté il y a 1 an
Avatar de BarnabéTebda
BarnabéTebda

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.

Posté il y a 1 an
Avatar de bestmomo
bestmomo

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

Posté il y a 1 an
Avatar de BarnabéTebda
BarnabéTebda

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']);
        });
    }
Posté il y a 1 an
Avatar de BarnabéTebda
BarnabéTebda

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

 
 
 
   
    }

Posté il y a 1 an
Avatar de StéphaneBorgne
StéphaneBorgne

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");
        }
    }
Posté il y a 1 an
Avatar de bestmomo
bestmomo

@BarnabéTebda

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

Posté il y a 1 an
Avatar de BarnabéTebda
BarnabéTebda

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

Posté il y a 1 an
Avatar de bestmomo
bestmomo

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.

Posté il y a 1 an
Avatar de BarnabéTebda
BarnabéTebda

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

    }
Posté il y a 1 an
Avatar de BarnabéTebda
BarnabéTebda

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

Posté il y a 1 an
Avatar de bestmomo
bestmomo

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;
}
Posté il y a 1 an
Avatar de BarnabéTebda
BarnabéTebda

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

Posté il y a 1 an
Avatar de BarnabéTebda
BarnabéTebda

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

Posté il y a 1 an

Vous ne pouvez pas répondre à ce sujet.