Я создаю веб-сайт Symfony2, у которого есть пользователи, и у каждого пользователя может быть несколько разрешений, например:
User1: manage users , manage sales , manage repository
User2: manage repository
user3: manage sales , manage repository
...
Какую систему разрешений использовать для такой системы?
Roles
или же ACLs
или же voters
или что-то другое?
Спасибо
Роли в порядке, если вы хотите предоставить «генеральный» разрешения.
Например, если вам нужен пользователь, чтобы иметь возможность управлять все или пользователи, то вы можете создать роль для него, например, ROLE_USER_MANAGER
, Или, если вы хотите предоставить ему права на управление продажами, вы можете предоставить ему ROLE_SALES_MANAGER
роль.
Так что в основном используйте Роли когда у тебя есть ограниченное количество разрешений для некоторых сущности в целом.
Вы Можно использовать их для других вещей, например, предоставляя роли, которые содержат имена и идентификаторы сущностей, ROLE_MANAGER_REPOSITORY_23
и затем, используя собственных избирателей, вы можете знать, что пользователи с этой ролью могут управлять хранилищем с идентификатором 23. Даже если этот подход может работать, мне лично это не нравится.
Если у вас много динамических разрешений, особенно в отношении отдельных моделей, то ACL — это то, что вам нужно. это обычно чуть менее производительный, так как он должен получать больше данных из хранилища данных, но гораздо более подходящий для этой цели.
С Symfony2 ACL, невероятно легко предоставлять и проверять разрешения, и даже разрешать отдельным пользователям предоставлять разрешения друг другу.
Кроме того, вводная часть Symfony ACL документы показывает вам оба этих подхода, а также указывает на некоторые взлеты / падения для каждого.
Других решений пока нет …