Это спорный вопрос, так как я больше не участвую в этом проекте, но он продолжает меня беспокоить. Интересно, есть ли у кого-нибудь лучшая идея для будущих ссылок и общих хороших практик программирования.
Учебный подход к безопасности - это «ролевая безопасность». Каждый экран, отчет или другая задача привязана к одной или нескольким ролям; каждому пользователю назначена одна или несколько ролей; и тогда каждый пользователь может использовать экраны и т. д., которые соответствуют его ролям и ничему другому. Правильно?
Несколько лет назад я руководил командой, разрабатывающей систему управления военно-техническими руководствами. У каждого руководства был «менеджер технического контента», лицо, ответственное за его написание или редактирование; «менеджер по запасам», ответственный за отслеживание копий и их отправку; и «административный менеджер», ответственный за бюджет и который поэтому решил, как часто будет пересматриваться книга, сколько экземпляров будет напечатано и так далее. Конечно, в каждой книге было много людей, которые заказывали копии и читали ее. (Поскольку это были военные, вы должны были получить разрешение на то, чтобы получить в руки книгу, документы о безопасности и все такое.) Обычно мы беспокоились не о реальных читателях, а о людях на каждой базе, которые управляли библиотеками. , но здесь это не совсем актуально.
Итак ... это очевидные "роли", но роль была привязана к конкретной книге. Один человек может быть менеджером технического контента для книги А, административным менеджером для книги Б и читателем 50 других книг. Таким образом, мы не могли сказать, что у пользователя была «роль». У каждого пользователя были разные роли для каждой книги.
В дополнение к этому были более обычные привилегии системного уровня: у нас было несколько системных администраторов, уполномоченных обновлять что-либо в систе ме, сотрудники службы поддержки, которые могли видеть практически любые данные, но не обновляли и т. Д.
В итоге я создал такую базу данных. (Чтобы не вдаваться в некоторые наши странные термины, я изменю некоторые имена полей и таблиц здесь, идея та же.)
Персона (person_id, имя и т. Д.)
Technical_Manual (manual_id, title, admin_manager_person_id, stock_manager_person_id, content_manager_person_id и т. Д.)
Authorized_Reader (manual_id, person_id и т. Д.)
Пользователь (user_id, admin_role и т. Д.)
Я был не очень доволен этой схемой, поскольку она означала, что безопасность была разделена на три таблицы: таблица technical_manual, таблица authorized_reader и таблица user. Но ... был ли более чистый способ, которым мы могли бы сделать это? Есть идеи получше?