#sql #permissions #api-design #access-control
#sql #разрешения #api-дизайн #управление доступом
Вопрос:
Здесь у меня проблема с структурированием кода для проверки разрешений.
Предположим, у меня есть три действия: read:own_users
, read:my_users
, read:all_users
.
И у меня есть маршрут get/users
.
Я хочу, чтобы этот маршрут возвращал всех пользователей, если у парня, который выполняет запрос, есть read:all_users
. Но если у него есть только read:my_users
разрешение, этот маршрут должен возвращать только пользователей, которых вставил этот парень. И последняя возможность, если у пользователя просто есть read:own_users
разрешение, я хочу, чтобы этот маршрут возвращал только ваш собственный объект.
Итак, что я хочу решить: как это сделать, не выполняя регистр переключения в моем коде для каждого маршрута, помещая where в мой SQL.
Или, может быть, я делаю это неправильно, и мне нужно спланировать все, чтобы попробовать новую стратегию.
Комментарии:
1. Вам не нужен регистр переключения, вам просто нужно подходящее предложение WHERE.
2. Можете ли вы проиллюстрировать это для меня? Я никогда не слышал о подходящем предложении WHERE.
3. Что-то вроде
WHERE Permission = All_Users OR (Permission = My_Users AND InsertedBy = Me)
.4. Я понял, но в моем случае у меня есть разрешения, назначенные пользователю внутри токена, а не внутри моей базы данных. В моей базе данных есть только информация.
5. Ваша база данных является источником защищенной информации, а не токена. Пусть база данных сама решает, какие записи обслуживать. Пусть токен выполняет работу по предоставлению разрешений.