Я хочу использовать избирателя, чтобы дать разрешения пользователям для папок, чтобы увидеть менеджер редактирования ... в 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);
}