Я подошел к этой проблеме, когда она возникла, чтобы дать каждому действующему действию или части информации, которая может быть показана, свою собственную Permission
.Каждый User
имеет коллекцию Permissions
.Исходя из этого, вы можете добавить другие слои структуры, чтобы помочь управлять огромным количеством разрешений, таких как иерархии или категории разрешений.
После того, как это будет сделано, вы можете задать различные части запроса.User
, если у них есть необходимые разрешения, или вы можете иметь PermissionManager
, взять User
и набор Permissions
и определить, есть ли у данного пользователя необходимые Permissions
.В любом случае, он будет работать нормально, но тот, который вы выберете, влияет на зависимости и архитектуру вашей системы.
Подход PermissionManager
имеет то преимущество, что ваши приложения не должны зависеть от User
, так что вы можете использовать другой PermissionManager
, который всегда возвращает False
, если нет соответствующих разрешений, или True
, если все разрешения подходят.
В простых ситуациях этот подход может быть излишним,и часто кажется, что это поначалу, но я пошел по пути использования базовых иерархических или грубозначенных ролей и обнаружил, что практически каждая система, над которой я работал, быстро становится слишком сложной для большинства ванильных, предварительно построенных ролей.системы разрешений на основе.