Выберите роли для просмотра этой единственной страницы в Laravel - PullRequest
0 голосов
/ 26 февраля 2020

Я хочу ограничить роли пользователей для просмотра специальных страниц моего сайта в Laravel. Поэтому я попытался добавить список ролей в edit.blade. php моего контроллера страницы:

<div class="form-group m-form__group row">
    <label for="example-text-input" class="col-2 col-form-label">
        <Permision></Permision>
    </label>
    <div class="col-10">
        @foreach($roles as $value)
            <label>{{ Form::checkbox('permission[]', $value->id, false, array('class' => 'name')) }}
                {{ $value->name }}</label>
            <br/>
        @endforeach
    </div>
</div>

Также он есть в моей функции редактирования контроллера:

public function edit($id)
{

    $object = Set::find($id);
    $roles = Role::orderBy('id','DESC')->paginate(5);

    $page = new \stdClass();
    $page->title = 'edit item';
    $page->form = 'set.form';
    $page->formMethod = 'post';
    $page->formAction = ["SetController@update", $id];
    $page->uploadURL = '';
    $page->submitButton = 'Submit';
    $page->is_edit = 1;



    return view('set.create', compact('page', 'object','roles'));

}

Теперь я понятия не имею, как сохранить роли в таблице базы данных этого контроллера и ограничить пользователя show.blade. php

Проблема заключается в том, как добавить доступные роли в каждой строке таблицы базы данных. этой страницы?

1 Ответ

0 голосов
/ 26 февраля 2020

Вы можете использовать такой пакет, как Spatie / laravel -permission

Этот пакет позволяет управлять разрешениями и ролями пользователей в базе данных.

После установки вы можете делать что-то вроде этого:

// Adding permissions to a user
$user->givePermissionTo('edit articles');

// Adding permissions via a role
$user->assignRole('writer');

$role->givePermissionTo('edit articles');

Поскольку все права будут зарегистрированы на Laravel воротах, вы можете проверить, есть ли у пользователя разрешение с помощью Laravel ' По умолчанию может работать:

$user->can('edit articles');

Если вы хотите создать собственное управление ролями-разрешениями, вы можете сделать что-то вроде следующего:

Создать roles, permissions Таблица. Затем сохраните каждый role_id и их разрешения в таблице roles_permissions.

Примечание. Вы можете кэшировать эту ассоциацию role_permissions в Redis, чтобы избежать повторных запросов к БД

You следует добавить соответствующий role id в таблицу Users.

Теперь напишите функцию, чтобы проверить, имеет ли заданная роль c установленное разрешение.

checkUserHasPermission(String $permissionKey, User $user):bool
{
    $rolePermissions = functionToGetPermissionForRole($user->role);
    return (boolean) in_array($permissionKey, $rolePermissions);
}
functionToGetPermissionForRole($roleId):array 
{
// add your logic to return the permissions associated with the specific role id
}

Примечание: Если вы кэшируете свою ассоциацию role_permissions в Redis, не забудьте обновить Redis при обновлении ролей и разрешений.

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