В целом для проектирования систем доступа полезно руководствоваться принципами
Orange Book. В вашем случае (не зная всех граничных условий) систему можно представить в виде:
- Пользователей: субъекты, которые наделяются некоторыми полномочиями. В общем случае могут объединяться в группы или роли для удобства управления.
- Ролей: роль не только группирует пользователей, но и позволяет добавить к ним некоторые атрибуты, применимые в контексте роли (как это часто делается в LDAP), например роль Город-менеджера добавит пользователю атрибут "ID города"
- Полномочий: отдельные разрешения, могут объединяться в групы полномочий для удобства.
- Объектов действия: элементы бизнес-логики, которые при применении полномочий меняют свое состояние. Также могут объединяться в группы.
То есть, у пользователя с ролью Город-менеджера есть есть полномочия для группы "полный контроль" над группой объектов "пользователи с ID города таким-то".
Конкретная реализация очень сильно зависит от того, что у вас за платформа, и какие под нее есть готовые библиотеки.