Дизайн приложения зависит от требований безопасности.
Например, информация хранится в нескольких базах данных или в одной базе данных? Важно ли предоставлять каждому ТИПУ пользователя схему базы данных, которая представляет их конкретные разрешения? Очевидно, ответы на эти вопросы показывают, нужна ли вам более безопасная система для доступа к базе данных.
Если вы это сделаете, то создайте пользователя базы данных для каждого типа пользователя, который будет существовать в системе. Предоставьте каждому пользователю права доступа к соответствующим таблицам, представлениям, процедурам и т. Д. Когда пользователь проходит проверку подлинности в системе, вам необходимо создать условное соединение с базой данных на основе типа пользователя для этого человека.
Чтобы принять крайнюю крайность, также может быть целесообразным контролировать доступ к базе данных строго с помощью хранимых процедур. Тогда каждый пользователь базы данных будет иметь доступ только к своему необходимому набору хранимых процедур.
Внедрение безопасности в базе данных может быть болезненным и увеличивает сложность приложения, а также стоимость его обслуживания и снижает общую сплоченность IMO приложения, но также создает очень плотную стену безопасности для любого, кто захочет взломать или иным образом злоупотребить системой.
Независимо от того, что вы реализуете в базе данных в целях безопасности, вам также, очевидно, потребуется использовать механизм сеанса для хранения аутентифицированного в данный момент пользователя и его типа. Простой способ изменить функциональность для конкретного пользователя - это инкапсулировать доступные действия каждого пользователя (функции или методы чтения) и их атрибуты (или свойства) в классе для представления конкретного пользователя. Таким образом, если два человека нажмут на Dashboard.php, они увидят именно те данные, к которым у них есть доступ.
Наконец, вы можете контролировать некоторые элементы управления доступом (и, вероятно, придется) с помощью информации, хранящейся о пользователе в базе данных, такой как, в каких городах они должны видеть информацию или для какого пользователя они контролируют. Затем используйте эту информацию для создания коллекций объектов, к которым можно получить доступ из ваших пользовательских доменных объектов.