с избирателем я могу назначить доступ пользователям для просмотра или редактирования ... файла - PullRequest
0 голосов
/ 03 июня 2019

Я хочу использовать избирателя, чтобы дать разрешения пользователям для папок, чтобы увидеть менеджер редактирования ... в Symfony 3.4 я использую acl, и я делаю это без проблем, и так как в версии 4 Symfony мы не можем использовать его, или мы I У меня нет документации по этому вопросу, я хочу использовать голосование и не знаю, могу ли я применить к нему доступ другого пользователя. вот код, который я использую в acl для регистрации нового доступа к папке для пользователя

    $aclProvider = $this->get('security.acl.provider');
    $objectIdentity = ObjectIdentity::fromDomainObject($folder);
    try {
        $acl = $aclProvider->createAcl($objectIdentity);
    } catch (\Exception $e) {
        $acl = $aclProvider->findAcl($objectIdentity);
    }
    // retrieving the security identity of the currently logged-in user
    $securityIdentity = UserSecurityIdentity::fromAccount($user);

    $roles = ["view", "edit", "management", "administration", "noaccess"];
    if (in_array($role, $roles)) {
        $aces = $acl->getObjectAces();
        foreach ($aces as $index => $ace) {
            if ($ace->getSecurityIdentity() == $securityIdentity) {
            /*  $ttt[$index]=$ace->getSecurityIdentity();
              print_r($ttt);*/

                $acl->deleteObjectAce($index);
            }
        }
    }
    // grant role access
    switch ($role) {
        case "view":
            $acl->insertObjectAce($securityIdentity, MaskBuilder::MASK_VIEW);
            break;
        case "edit":
            $acl->insertObjectAce($securityIdentity, MaskBuilder::MASK_EDIT);
            break;
        case "management":
            $acl->insertObjectAce($securityIdentity, MaskBuilder::MASK_MASTER);
            break;
        case "administration":
            if (true === $this->isGranted('OWNER', $folder)
                || $this->isGranted('ROLE_ADMIN')
            ) {
                $acl->insertObjectAce($securityIdentity, MaskBuilder::MASK_OWNER);
            } else {
                return new JsonResponse(array('success' => false,"message" > => "Vous n'avez pas la permission de donner l'accès à ce dossier " . $folder->getName() . " !"));
            }
            break;
        case "noaccess":
            break;
        default:
            throw $this->createNotFoundException();
    }
    $aclProvider->updateAcl($acl);
    $em = $this->getDoctrine()->getManager();
    $documents = $em->getRepository('AppBundle:Document')->findByFolder($folder);
    foreach ($documents as $document) {
        $this->grantAccessToFile($document, $user, $role);
    }
    $folders = $em->getRepository('AppBundle:Folder')->findBySubfolder($folder);
    foreach ($folders as $oneFolder) {
        $this->grantAccessToFolder($oneFolder, $user, $role);
    }
...