172 похожих чатов

Нужна помощь в проектировании: в системе есть несколько ролей пользователей - менеджеры -

бригадиры
- транспортники
- и всякие другие

Есть документы, изменять которые могут лишь некоторые роли (к примеру Менеджеры и Бригадиры)
Как на уровне схемы развязать такое ограничение, чтобы в таблице Документы user_Id содержал ссылки только на эти 2 группы и при этом Из таблицы Документы можно было бы однозначно понять пользователь какой роли изменил запись?

37 ответов

22 просмотра

у вас в вопросе есть такой подвопрос. в постргресе есть права, в том числе на доступ к таблицам и строкам от определённого юзера. То есть можно сделать таблицу и настроить права так, чтобы одни строки могли только читать или читать и изменять только менеджеры, а другие бригадиры и так далее. И если это учебная задача, то конечно это и спрашивают. Но если это реально приложение, то конечно решается на уровне СП с одним подключением в софте пишете ту логику, которая вам нужна, добавляете два поля дата и кто добавлял, изменял запись, делаете логику в приложении в каждом запросе кто и как может это всё менять.

ks
у вас в вопросе есть такой подвопрос. в постргресе...

Вы немного не в ту сторону пошли - мне не нужна row level security мне на уровне схемы данных нужно сделать связь с ролями пользователей (тупа поставить ссылки на 2 таблицы с поля user_id не проблема) но как-то криво оно выгдядит - нужно еще мостыки городить типа добавить поле роль юзера Я думал есть какие-то типовые развязки таких ситуаций на уровне схем данных

https://wiki.postgresql.org/wiki/Don't_Do_This#Don.27t_use_serial вам нужно 2 таблицы, это сотрудники, и должности, все, зачем на каждую должность делать таблицу? это дичь какая то

Владимир
https://wiki.postgresql.org/wiki/Don't_Do_This#Don...

А по существу вопроса есть что-нибудь?

Владимир
https://wiki.postgresql.org/wiki/Don't_Do_This#Don...

Сотрудники в реальной а не в идеальной жизни к сожалению могут существовать в нескольких ипостасях

Бред, сотрудник + роль должно быть

central hardware
Бред, сотрудник + роль должно быть

я уже писал выше сотрудник+должность ну или +штатная единица когда менеджер+уборщик+крановщик :)

Владимир
я уже писал выше сотрудник+должность ну или +штатн...

И как это решит проблемы подмены сотрудников в экстренных ситуациях?

Вадим Бударин Бударин
И как это решит проблемы подмены сотрудников в экс...

назначается сотруднику дополнительная роль на период подмены

Вадим Бударин Бударин
Вот и появляется у сотрудника 2 роли

как и в реальной жизни, насколько понятно из вашего описания бизнес-процесса

Sergey Bezrukov
Таблица "занимаемая должность": id user_id positio...

пройдите в бухгалтерию, распишитесь в ведомости :)

Владимир
я уже писал выше сотрудник+должность ну или +штатн...

Имея ссылку на сотрудника каким образом я могу понять от имени какой роли он сейчас выступает?

Ivan KHOKHLOV
как и в реальной жизни, насколько понятно из вашег...

Ссылка на таблицу Сотрудники никак не говорит о том какую роль сотрудник исполняет при наличии у него более 1й активной роли и не ограничивает

Вадим Бударин Бударин
Ссылка на таблицу Сотрудники никак не говорит о то...

да, поэтому делают в кадрах штатную единицу, человека привязывают к ставке и все это азы кадрового учета

Вадим Бударин Бударин
Ссылка на таблицу Сотрудники никак не говорит о то...

непонятно в вашем бизнес-процессе, какое у вас подразумевается отношение сотрудник-роль один ко многим или один к одному

Alexey Bulgakov
один ко многим очевидно

И мне так кажется, но человек, как будто намекает на другое. Поэтому я его и не понимаю

Ivan KHOKHLOV
непонятно в вашем бизнес-процессе, какое у вас под...

один сотрыдник одновременно исполнять несколько ролей

Alexey Bulgakov
его никто не понимают

я думаю Колумб переоткрывает кадровый учет.

Владимир
я думаю Колумб переоткрывает кадровый учет.

Непонятно, вроде стандартная задача. О чем, вообще, обсуждение

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

Dmitriy Sviridov
Не понял, зачем вы проектируете именно так. Под ка...

ещё не забывайте надо учесть, что у человека меняются права со временем. То есть нужен лог истории, отдельная таблица, в нём пишет у кого какие права назначали, снимали. Ну замещение должности. Это всё решается на уровне сервера приложений в коде. Я удивлён, что это делают на уровне баз данных. И так как это реальный софт, логика будет достаточно запутанной.

ks
ещё не забывайте надо учесть, что у человека меняю...

вы хранить информацию будете в сервере приложений? это как раз типичная задача для БД, причем уже расписанная вдоль и поперек, выберите просто ваш вариант и все

Владимир
вы хранить информацию будете в сервере приложений?...

нет, писать сложную логику обработки прав на нажимание всяких кнопок в реальном софте на сервере приложений. А хранить в базе. Нет, в книжках рассмотрены очень простые примеры, реально далёкие от учётных систем.

Владимир
а кто-то про кнопки говорил?

а думаете они прямо в базе будут? Ну менеджеры, бригадиры?

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта