Symfony2 ACL应该用于检查SaaS中的所有权吗?

时间:2012-03-21 16:55:18

标签: symfony acl saas multi-tenant

在多租户Web应用程序中,是否应使用Symfony2 ACL框架来检查域对象的所有权?

我无法理解这一点(假设每个表都有User对象的后向引用)我可以只针对实体所有者id检查当前用户id,就像以下内容:

/*
 * @Route("/edit/{slug}")
 * @Method("GET|POST")
 * @Secure(roles="ROLE_USER")
 * @Template
 */
public function editAction($slug);
{
    // Find the post given the slug
    $repo    = $this->getDoctrine()->getRepository('AcmeHelloBundle:Post');
    $entity  = $repo->findOneBySlug($slug);
    $current = $this->get('security.contex')->getToken()->getUser();

    // 404 if slug is invalid
    if(!$entity) throw new $this->createNotFoundException();

    // AccessDenied if current user is not the owner of the entity
    if($current->getId() != $entity->getUser()->getId())
        throw new AccessDeniedException();
}

也许ACL可以帮助避免将每个实体引用回用户表?任何解释或示例都会有所帮助,谢谢。

1 个答案:

答案 0 :(得分:2)

如果您有多个人可以访问同一个域的方案,则ACL非常有用。 The ACL documentation就是一个很好的例子。

例如,假设您有SaaS为公司提供协作文档编辑。公司可能希望限制对文档的访问,只允许公司的高管编辑它而不是员工。在这种情况下,您不能单独使用用户令牌,因为多个成员需要访问域。这就是ACL的用处所在。