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

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

Добрый день!

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

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

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

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

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

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

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

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

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

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

Войти через центр авторизации
Похожие вопросы