Silex Пользователь с несколькими ролями из базы данных

у меня есть проект Silex с моим SecurityServiceProvider, как:

$this->app->register(new SecurityServiceProvider(), array(
'security.firewalls' => array(
'login' => array(
'pattern' => '^/login$',
),
'secured' => [
'pattern' => '^/admin.*$',
'anonymous' => true,
'form' => array(
'login_path' => '/login',
'check_path' => '/admin/auth'
),
'logout' => array(
'logout_path' => '/admin/logout'
),
'users' => $this->app->share(function() use ($self) {
return new AuthenticationSuccessHandler($self->app['db']);
}),
]
),
'security.role_hierarchy' => [
'ROLE_USER' => [],
'ROLE_BACKEND_USER' => ['ROLE_USER'],
'ROLE_SUPER_ADMIN' => ['ROLE_USER','ROLE_BACKEND_USER']
],
'security.access_rules' => array(
['^/.*$', 'ROLE_USER'],
['^/admin.*$', 'ROLE_SUPER_ADMIN'],
['^/admin.*$', 'ROLE_BACKEND_USER']
)
));

Теперь у меня есть таблица БД со списком ролей:

22  ROLE_ACCESS_NODES_DELETE
23  ROLE_ACCESS_NODES_STATUS
24  ROLE_ACCESS_NEWSLETTERS_SEND
25  ROLE_USER
26  ROLE_BACKEND_USER

Мои пользователи хранятся в таблице БД, тогда у меня есть другая таблица для отношений пользователя / роли.

Как я могу загрузить эти роли и применить к моему пользователю?

Спасибо

2

Решение

Посмотри на написание пользовательского провайдера в Symfony2. Такой же относится к Silex также.

Вы в основном должны написать кастом User класс и UserProvider который загружает пользователя по его имени, а затем может извлечь любые дополнительные данные, которые могут вам понадобиться.
В вашем случае вы также загрузите права пользователей из базы данных, добавив их в какое-либо свойство в User объект, который позже может быть получен Symfony2 с помощью :: getRoles пользовательским интерфейсом ().

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]