Laravel Nova: принадлежит. Отображение списка на странице сведений в зависимости от условия (из базы данных) - PullRequest
0 голосов
/ 13 сентября 2018

Я занимаюсь разработкой веб-приложения с использованием Laravel Nova. Nova - это совершенно новая система CMS для Laravel. Какие у меня сейчас проблемы со многими ко многим отношениями и предоставлением данных.

У меня есть таблица пользователей со следующими данными

users - id, name, email, role

Тогда у меня есть таблица отделов со следующими данными.

departments - id, name, code

Они имеют отношения многие ко многим с такой сводной таблицей.

departments_users - id, department_id, users_id

В ресурсе User, если я добавил это в методе fields

public function fields(Request $request)
    {
        return [
            ID::make()->sortable(),

            //other fields
            BelongsToMany::make("Departments")
        ];
    }

Из-за того, что я добавил BelongsToMany в ресурс пользователя, если я перейду на страницу сведений о пользователе, я увижу что-то подобное.

enter image description here

В основном я имею в виду возможность отображения списка отделов пользователей и возможность присоединения отделов к пользователю. Но я не хочу отображать эту опцию / список все время. Я только хочу показать это в зависимости от роли. Я имею в виду что-то подобное в методе полей. Пожалуйста, прочитайте комментарий в следующем коде.

public function fields(Request $request)
    {
        return [
            ID::make()->sortable(),
            //other fields
            BelongsToMany::make("departments")//Do this only if the user role is "staff"
        ];
    }

1 Ответ

0 голосов
/ 16 сентября 2018

Этого легко добиться, используя авторизацию laravel nova.

Вы можете добавить ->canSee() в поле BelongsToMany.

Вы не указали, какой пользователь должен иметь роль ".».Вы вошли в систему или отредактированы.

Если вы вошли в систему, просто введите:

BelongsToMany::make("departments")
    ->canSee(function ($request) {
        return $request->user()->role == 'stuff';
    }),

Если отредактированный пользователь:

BelongsToMany::make("departments")
    ->canSee(function ($request) {
        return $this->role == 'stuff';
    }),

Для получения дополнительной информации проверьте Документы для авторизации поля

...