Проблема с разрешениями для структурирования кода (ACL)

#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. Ваша база данных является источником защищенной информации, а не токена. Пусть база данных сама решает, какие записи обслуживать. Пусть токен выполняет работу по предоставлению разрешений.