Laravel - Как указать роль пользователя для отображения - PullRequest
0 голосов
/ 15 октября 2019

Я работаю над веб-приложением, использующим Laravel-5.8 в качестве бэкэнда. Я объединяю два класса: User и Role

ApiController.php

public function store(Request $request)
{
    if(!Auth::user()->hasPermissionTo('Add Users'))
        return response()->json([ "message" => 'User do not have permission'], 401);

    $request->validate([
        'name' => 'required|string|min:2',
        'email' => 'required|string|email|unique:users',
        'password' => 'required|string|confirmed|min:6'
    ]);

    $user = new User([
        'name' => $request->name,
        'email' => $request->email,
        'password' => bcrypt($request->password),
        'activation_token' => str_random(60),
        'address' => $request->email,
        'about' => $request->email,
    ]);

    if($request->role)
        foreach($request->role as $role)
            $user->assignRole($role);
    else {
        return response()->json([
            'error' => 'Role Not Found!'
        ], 401);
    }

    $user->school_id = Auth::user()->school_id;

    if($request->address)
        $user->address = $request->address;

    if($request->about)
        $user->about = $request->about;

    $user->save();

    $avatar = Avatar::create(strtoupper($user->name))->getImageObject()->encode('png');
    Storage::put('avatars/'.$user->id.'/avatar.png', (string) $avatar);
    $user->notify(new SignupActivate($user));

    return response()->json([
        'message' => 'Successfully Added New User!'
    ], 201);
}

Из приведенного выше кода я не хочу отображать все роли. Я хочу использовать оператор foreach, чтобы выбрать и отобразить только эти две роли: Admin, Staff. То есть где role_name = Admin, Staff.

foreach($request->role as $role)
    $user->assignRole($role);

Как мне этого добиться?

1 Ответ

0 голосов
/ 15 октября 2019

Я думаю, вы можете сделать это следующим образом.

  1. Вы можете использовать метод фильтра Laravel, который находится здесь в документации Метод фильтра коллекции Laravel
  2. Этот метод возвращает массив элементов, которые прошли заданное условие
  3. Сначала вы преобразовываете свой запрос ролей в коллекцию
  4. Затем используете условие, подобное

    вернуть, если ($ role == 'Admin' || $ role == 'Staff') Где вы видите return $ value> 2;


$collection = collect([1, 2, 3, 4]);

$filtered = $collection->filter(function ($value, $key) {
    return $value > 2;
});

$ фильтруется-> все ();

// [3, 4]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...