Создание представления mysql с существующим именем таблицы при каждом запросе http для целей ролей - PullRequest
0 голосов
/ 29 марта 2019

Мне нужно добавить разрешения и роли в мое приложение, но я не хотел бы переходить от файла к файлу по методу, тип ролей, которые мне нужны, например, показывает только определенные записи из базы данных в зависимости от подключенного пользователя. Например: у меня есть таблицы "contracts_types" и "contracts", при перечислении "contracts" я использую JOIN с "contracts_types", чтобы я также показывал тип контракта, поэтому, если тип контракта не существует, Контракт не будет показан. Что я хотел бы сделать, так это создавать какое-то представление при каждом подключении пользователя. Это представление должно содержать изображение таблицы с фильтром:

CREATE VIEW contracts_types AS SELECT * FROM contracts_types WHERE contractTypeId IN( USER AUTHORISED CONTRACTS TYPES IDS )

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

1 Ответ

0 голосов
/ 19 апреля 2019

«Так что, если тип контракта не существует, контракт не будет показан» - вот что он делает:

SELECT ...
    FROM contracts AS c
    JOIN contract_types AS ct  ON ct.type = c.contract_type

Или ваш вопрос более сложный?

Вы не можете выполнять какую-либо фильтрацию для строк таблицы, не имея какого-либо фильтра в запросе.

SELECT ...
    FROM contracts AS c
    JOIN contract_types AS ct  ON ct.type = c.contract_type
    JOIN role_can_see AS ucs  ON rcs.type = c.contract_type
    WHERE rcs.role = ?

(и заполните роль, к которой принадлежит пользователь)

Если пользователь в нескольких ролях, то

    WHERE rcs.role IN (...)

Но это эффективно реализует "роли" самостоятельно.

...