具有来自数据库的多个角色的 Silex 用户

Posted

技术标签:

【中文标题】具有来自数据库的多个角色的 Silex 用户【英文标题】:Silex User with multi roles from database 【发布时间】:2016-05-26 05:13:33 【问题描述】:

我的 SecurityServiceProvider 有 silex 项目,例如:

$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

我的用户存储在数据库表中,然后我有其他表用于用户/角色关系。

如何加载这些角色并应用到我的用户?

谢谢

【问题讨论】:

您在哪里存储用户以及如何为用户分配角色? @MaxP。我的用户存储在数据库表中,然后我有其他表用于用户/角色关系。 【参考方案1】:

看看writing custom user provider in Symfony2。同样是applies to Silex。

您基本上必须编写一个自定义的User 类和UserProvider,通过用户名加载用户,然后可以获取您可能需要的任何其他数据。 在您的情况下,您还将从数据库加载用户权限,将它们添加到 User 对象中的某些属性,稍后 Symfony2 可以使用 UserInterface::getRoles() 检索这些属性。

【讨论】:

以上是关于具有来自数据库的多个角色的 Silex 用户的主要内容,如果未能解决你的问题,请参考以下文章

角色用户权限的关系

具有多个角色的 Laravel 身份验证

aspnet 身份中用户的多个角色

拒绝Spring Security中具有相同角色的多个用户的访问

在SQL Server 里,登录名,用户,角色,权限,有什么联系?

无法使用具有来自 firebase 角色的 Angular AuthGuard