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

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

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

users - id, name, email, role

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

departments - id, name, code

У них есть отношения "многие ко многим" с такой сводной таблицей.

departments_users - id, department_id, users_id

В ресурсе пользователя, если я добавил это в метод полей

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

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

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

введите здесь описание изображения

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

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

person Wai Yan Hein    schedule 13.09.2018    source источник


Ответы (1)


Этого легко добиться с помощью авторизации 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';
    }),

Дополнительные сведения см. В документах по авторизации полей

person Bostjan    schedule 16.09.2018
comment
Есть ли способ получить идентификатор страницы с подробностями из URL-адреса? - person Wai Yan Hein; 16.09.2018
comment
если вы имеете в виду ID текущего детализированного ресурса. Это $ this- ›id - person Bostjan; 16.09.2018
comment
Огромное спасибо. Это именно то, что я хотел. - person Wai Yan Hein; 16.09.2018