@pasha_a
Люблю ставить перед собой цели и добиваться их.

Как разграничить доступ к информации в многопользовательской системе?

Добрый день!

В процессе проектирования столкнулся с проблемой.
Имеется система контроля доступа.
В ней есть сущности:
- пользователь (ФИО, телефон, email),
- карточка доступа (номер карточки, период действия),
- организация,
- должность пользователя.

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

Для людей, контролирующих систему контроля доступа (назовем их менеджеры) есть разграничение доступа к информации касательно организации, данные по которое они могут видеть.
Например:
- пользователь user1 имеет должность в организации org1,
- для проходов в org1 он использует карточку card1 (но кроме этого еще имеет карточки card2 и card3,
однако они не используются в данной организации)
- manager1 (который заведует организацией org1) может видеть данные пользователя user1
(ФИО, телефон, email и данные по карточке card1, т.к. она привязана к доступу в org1).

При этом база пользователей с их картами подгружается в систему в самом начале, т.е. когда менеджеры
начинают добавлять должности по своим организациям, то это накладывается на уже имеющихся пользователей.
При приеме на работу и добавлении должности мне нужно найти нужного человека в БД по ФИО (при этом если пользователей несколько с одинаковыми данными, то я увижу их несколько)
При добавлении карточки пользователя в контроль доступа мне нужно ввести номер карты и убедиться что она принадлежит правильному пользователю.

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

Была идея некой вышестоящей должности и полными правами доступа ко всему и чтобы он открывал доступ к информации по тому или иному пользователю для принятия их на работу в ту или иную организацию. Но это не совсем удобно.
Больше идей по тому как организовать ограниченный доступ нет, есть мысль что в крайнем случае можно просто не отображать полные данные пользователя (например, только последние N букв и цифр его email-а и пароля, которых будет достаточно для того чтобы уникально идентифицировать того ли мы человека принимаем на работу или его однофамильца).

Буду рад любой помощи, любым подсказкам и ссылкам в какую сторону посмотреть, что почитать.

P.S. Прошу простить если не совсем корректно указал теги, не придумал куда лучше отнести данный вопрос.
  • Вопрос задан
  • 82 просмотра
Решения вопроса 1
begemot_sun
@begemot_sun
Программист в душе.
Пусть менеджер сам заводит этого человека для организации.
Система может сопоставить уникальную информацию типа ИНН, и связать человека с общей базой.
Т.о. менеджер не будет иметь "выбора" личностей из общего списка

P.S. Можете отмечать )
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
inoise
@inoise
Solution Architect, AWS Certified, Serverless
То ли у меня наступает синдром микроскопа, то ли день сурка. Читаем про ABAC, Casbin или Open Policy Agent
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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