在Symfony 2中使用ACL管理权限的最佳方法是什么?

时间:2015-07-06 09:16:50

标签: symfony

我在使用Symphony 2的项目中工作。这是一个复杂的项目,需要很多安全元素。我尝试创建ACL以授予或撤消用户的权限,但我遇到了问题:我不知道如何获取用户的权限。我需要一种最好的方法来管理ACL权限。

我需要从模块到数据库中的字段的权限级别,并在安全模块中检索此权限。

现在我将系统放在2个不同的数据库中,在一个数据库中我无法更改任何内容,另一个数据库包含我的所有安全表和其他内容,但我需要在这些数据库中授予权限。

我在考虑创建一个外部接口来管理ACL,但这与创建复制Symphony 2 ACL相同。

使用Symphony 2在系统中进行权限管理的最佳方法是什么?

我如何检查实体中字段的权限,因为方法是在树枝上我认为不是最好的方法,因为它会查询每个字段的数据库?

2 个答案:

答案 0 :(得分:0)

您需要为用户设置角色,所有内容都在此处描述:http://symfony.com/doc/current/book/security.html#roles

定义角色后,您可以在访问控制列表中使用它们,或使用isGranted方法在任何控制器/模板中使用它们。这是SF2的最佳实践,据我所知,isGranted方法没有性能问题。

答案 1 :(得分:0)

您可以在控制器中的操作内以多种方式执行此操作:

public function helloAction($name)
{
    if (!$this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_FULLY')) {
        throw $this->createAccessDeniedException();
    }

    // ...
}

Inside Twig:

{% if is_granted('ROLE_ADMIN') %}
    <a href="...">Delete</a>
{% endif %}