Home >Backend Development >PHP Tutorial >在Symfony中,如何通过根据 routing placeholder 来判断当前用户是否具有 access control?

在Symfony中,如何通过根据 routing placeholder 来判断当前用户是否具有 access control?

WBOY
WBOYOriginal
2016-06-06 20:49:391160browse

目的:

为了使一个用户可以管理多个商店

例子:

有一个用户A,他被赋予了商店ID为1和2的商店的管理权限。

那么他访问 ^/shop/1 和 ^/shop/2 路径的商店时,可以管理后台。 而他访问 ^/shop/3 商店时,不具备后台访问的功能。


  • 这个功能该怎么实现?
  • 如果有相关的英文资料,直接给我连接也行。
  • 或者推荐给我几个英文的搜索关键词

谢谢

回复内容:

目的:

为了使一个用户可以管理多个商店

例子:

有一个用户A,他被赋予了商店ID为1和2的商店的管理权限。

那么他访问 ^/shop/1 和 ^/shop/2 路径的商店时,可以管理后台。 而他访问 ^/shop/3 商店时,不具备后台访问的功能。


  • 这个功能该怎么实现?
  • 如果有相关的英文资料,直接给我连接也行。
  • 或者推荐给我几个英文的搜索关键词

谢谢

关键词: ParamConverter,ACL

设: 你的商店是用一个Doctrine的Entity,如

<code class="lang-php">namespace YourBundle\Entity;

class Store
{
    // ...
}
</code>

代码:

<code class="lang-php">// 在你的Controller里,先引入你的Store类:
use YourBundle\Entity\Store;
// 再引入SensioFrameworkExtraBundle(Symfony 2默认包含)的ParamConverter注解:
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
// 再引入JMSSecurityExtraBundle(Symfony 2默认包含)的SecureParam注解:
use JMS\SecurityExtraBundle\Annotation\SecureParam;

class YourController
{
    /**
     * 通过ParamConverter,将router里的id(或别的placeholder,注意,默认是取id)值作为主键来实例化为一个Store对象
     * @ParamConverter("store", class="YourBundle:Store", options={"id"="id"})
     * 这里指要求当前用户对$store参数,拥有OWNER权限
     * @SecureParam(name="store", permissions="OWNER")
     */
    public function someAction(Store $store)
    {
        // ...
    }
}
</code>

如何使用户对$store对象拥有OWNER权限,请参考:http://symfony.com/doc/current/cookbook/security/acl.html

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn