Ограничить, какие строки могут редактировать пользователи в реляционной базе данных - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть Postgresql база данных, настроенная с таблицами пользователей, предприятий, кампаний и ваучеров

Каждый ваучер имеет родительскую кампанию, каждая кампания имеет родительский бизнес, и каждый пользователь может принадлежать одному или больше предприятий, связанных через таблицу business_user FK.

Как мне остановить изменение пользователем строк, которые не принадлежат бизнесу, к которому он принадлежит? Я использую jwts для управления сессиями, и они хранят userId.

Использую ли я внутренние объединения? Но тогда как я могу иметь дело со многими деловыми и пользовательскими отношениями?

1 Ответ

0 голосов
/ 09 апреля 2020

Вы не предоставили описание таблицы (DDL) и примерные данные. Я не могу предоставить фактическое утверждение. Лучше всего показать технику, которую вы можете использовать. Пожалуйста, смотрите Как задать для любых будущих вопросов. Чтобы даже показать технику, мне нужно сослаться на столбцы, поэтому я делаю следующие предположения:

  • Каждая таблица имеет идентификатор столбца, и этот столбец определяется как PK.
  • Каждая таблица имеет соответствующие столбцы внешнего ключа и имена как RefTable _id
  • Каждая таблица имеет столбец без ключа COL.

В этом случае применяется метод (и существует выбор ...), где выбор следует по цепочке FK для бизнеса из обновляемой таблицы и из business_user в бизнес. Таким образом, обновление ваучера становится:

update voucher vch 
   set col = '...'
 where vch.id = &vid
   and exists
       ( select null 
           from campaign camp 
           join business bus  on bus.id = camp.business_id
           join business_user bu on bu.business_id = bus.id
          where camp.id = vch.campaign_id
            and bu.user_id = &uid
       );  

, где & vid и & uid для vouhcer.id и user.id соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...