2012-09-17 2 views
3

여기 누군가 내가 도와 줄 수 있습니다. 블로그 댓글을 추가하고 그에 대한 권리를 추가합니다.ACL ROLE_ADMIN이 작동하지 않습니다.

  • 블로그를 만든 사용자의 권한에 대한 권한은 정상입니다.
  • 로그인하지 않은 사용자의 권한으로 댓글을 볼 수 있으므로 확인이 완료됩니다.
  • 관리자가 댓글을 수정/삭제할 수 없습니다.하지만 뭐가 잘못 되었나요? 컨트롤러 코드의

부 :

// Creating the ACL 
$aclProvider = $this->get('security.acl.provider'); 
$objectIdentity = ObjectIdentity::fromDomainObject($blogComment); 
$acl = $aclProvider->createAcl($objectIdentity); 

// Creating full access for the admin 
$roleSecurityIdentity = new RoleSecurityIdentity('ROLE_ADMIN'); 
$acl->insertObjectAce($roleSecurityIdentity, MaskBuilder::MASK_MASTER); 

// Creating view rights for the not-logged in users 
$roleSecurityIdentity = new RoleSecurityIdentity('IS_AUTHENTICATED_ANONYMOUSLY'); 
$acl->insertObjectAce($roleSecurityIdentity, MaskBuilder::MASK_VIEW); 

// retrieving the security identity of the currently logged-in user 
$securityContext = $this->get('security.context'); 
$user = $securityContext->getToken()->getUser(); 
$securityIdentity = UserSecurityIdentity::fromAccount($user); 

// grant owner access 
$acl->insertObjectAce($securityIdentity, MaskBuilder::MASK_OWNER); 
$aclProvider->updateAcl($acl); 

심포니 프로파일 보안

Username Mitchel 
Authenticated? yes 
Roles [ROLE_ADMIN] 

데이터베이스 덤프 : 나는 또한 symfony 포럼에 주제를 만들었지 만

-- phpMyAdmin SQL Dump 
-- version 3.5.2.2 
-- http://www.phpmyadmin.net 
-- 
-- Machine: localhost 
-- Genereertijd: 17 sep 2012 om 14:19 
-- Serverversie: 5.1.65 
-- PHP-versie: 5.3.16 

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; 
SET time_zone = "+00:00"; 


-- -------------------------------------------------------- 

-- 
-- Tabelstructuur voor tabel `acl_classes` 
-- 

CREATE TABLE IF NOT EXISTS `acl_classes` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `class_type` varchar(200) NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `UNIQ_69DD750638A36066` (`class_type`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; 

-- 
-- Gegevens worden uitgevoerd voor tabel `acl_classes` 
-- 

INSERT INTO `acl_classes` (`id`, `class_type`) VALUES 
(1, 'MV\\BetaalbaarkozijnBundle\\Entity\\BlogComment'); 

-- -------------------------------------------------------- 

-- 
-- Tabelstructuur voor tabel `acl_entries` 
-- 

CREATE TABLE IF NOT EXISTS `acl_entries` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `class_id` int(10) unsigned NOT NULL, 
    `object_identity_id` int(10) unsigned DEFAULT NULL, 
    `security_identity_id` int(10) unsigned NOT NULL, 
    `field_name` varchar(50) DEFAULT NULL, 
    `ace_order` smallint(5) unsigned NOT NULL, 
    `mask` int(11) NOT NULL, 
    `granting` tinyint(1) NOT NULL, 
    `granting_strategy` varchar(30) NOT NULL, 
    `audit_success` tinyint(1) NOT NULL, 
    `audit_failure` tinyint(1) NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `UNIQ_46C8B806EA000B103D9AB4A64DEF17BCE4289BF4` (`class_id`,`object_identity_id`,`field_name`,`ace_order`), 
    KEY `IDX_46C8B806EA000B103D9AB4A6DF9183C9` (`class_id`,`object_identity_id`,`security_identity_id`), 
    KEY `IDX_46C8B806EA000B10` (`class_id`), 
    KEY `IDX_46C8B8063D9AB4A6` (`object_identity_id`), 
    KEY `IDX_46C8B806DF9183C9` (`security_identity_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ; 

-- 
-- Gegevens worden uitgevoerd voor tabel `acl_entries` 
-- 

INSERT INTO `acl_entries` (`id`, `class_id`, `object_identity_id`, `security_identity_id`, `field_name`, `ace_order`, `mask`, `granting`, `granting_strategy`, `audit_success`, `audit_failure`) VALUES 
(1, 1, 1, 1, NULL, 0, 128, 1, 'all', 0, 0), 
(2, 1, 1, 2, NULL, 1, 1, 1, 'all', 0, 0), 
(3, 1, 1, 3, NULL, 2, 64, 1, 'all', 0, 0); 

-- -------------------------------------------------------- 

-- 
-- Tabelstructuur voor tabel `acl_object_identities` 
-- 

CREATE TABLE IF NOT EXISTS `acl_object_identities` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `parent_object_identity_id` int(10) unsigned DEFAULT NULL, 
    `class_id` int(10) unsigned NOT NULL, 
    `object_identifier` varchar(100) NOT NULL, 
    `entries_inheriting` tinyint(1) NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `UNIQ_9407E5494B12AD6EA000B10` (`object_identifier`,`class_id`), 
    KEY `IDX_9407E54977FA751A` (`parent_object_identity_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; 

-- 
-- Gegevens worden uitgevoerd voor tabel `acl_object_identities` 
-- 

INSERT INTO `acl_object_identities` (`id`, `parent_object_identity_id`, `class_id`, `object_identifier`, `entries_inheriting`) VALUES 
(1, NULL, 1, '1', 1); 

-- -------------------------------------------------------- 

-- 
-- Tabelstructuur voor tabel `acl_object_identity_ancestors` 
-- 

CREATE TABLE IF NOT EXISTS `acl_object_identity_ancestors` (
    `object_identity_id` int(10) unsigned NOT NULL, 
    `ancestor_id` int(10) unsigned NOT NULL, 
    PRIMARY KEY (`object_identity_id`,`ancestor_id`), 
    KEY `IDX_825DE2993D9AB4A6` (`object_identity_id`), 
    KEY `IDX_825DE299C671CEA1` (`ancestor_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

-- 
-- Gegevens worden uitgevoerd voor tabel `acl_object_identity_ancestors` 
-- 

INSERT INTO `acl_object_identity_ancestors` (`object_identity_id`, `ancestor_id`) VALUES 
(1, 1); 

-- -------------------------------------------------------- 

-- 
-- Tabelstructuur voor tabel `acl_security_identities` 
-- 

CREATE TABLE IF NOT EXISTS `acl_security_identities` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `identifier` varchar(200) NOT NULL, 
    `username` tinyint(1) NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `UNIQ_8835EE78772E836AF85E0677` (`identifier`,`username`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ; 

-- 
-- Gegevens worden uitgevoerd voor tabel `acl_security_identities` 
-- 

INSERT INTO `acl_security_identities` (`id`, `identifier`, `username`) VALUES 
(2, 'IS_AUTHENTICATED_ANONYMOUSLY', 0), 
(1, 'MV\\BetaalbaarkozijnBundle\\Entity\\User-User', 1), 
(3, 'ROLE_ADMIN', 0); 

-- 
-- Beperkingen voor gedumpte tabellen 
-- 

-- 
-- Beperkingen voor tabel `acl_entries` 
-- 
ALTER TABLE `acl_entries` 
    ADD CONSTRAINT `FK_46C8B8063D9AB4A6` FOREIGN KEY (`object_identity_id`) REFERENCES `acl_object_identities` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, 
    ADD CONSTRAINT `FK_46C8B806DF9183C9` FOREIGN KEY (`security_identity_id`) REFERENCES `acl_security_identities` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, 
    ADD CONSTRAINT `FK_46C8B806EA000B10` FOREIGN KEY (`class_id`) REFERENCES `acl_classes` (`id`) ON DELETE CASCADE ON UPDATE CASCADE; 

-- 
-- Beperkingen voor tabel `acl_object_identities` 
-- 
ALTER TABLE `acl_object_identities` 
    ADD CONSTRAINT `FK_9407E54977FA751A` FOREIGN KEY (`parent_object_identity_id`) REFERENCES `acl_object_identities` (`id`); 

-- 
-- Beperkingen voor tabel `acl_object_identity_ancestors` 
-- 
ALTER TABLE `acl_object_identity_ancestors` 
    ADD CONSTRAINT `FK_825DE2993D9AB4A6` FOREIGN KEY (`object_identity_id`) REFERENCES `acl_object_identities` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, 
    ADD CONSTRAINT `FK_825DE299C671CEA1` FOREIGN KEY (`ancestor_id`) REFERENCES `acl_object_identities` (`id`) ON DELETE CASCADE ON UPDATE CASCADE; 

그 그들은 stackoverflo처럼 그렇게 활동적이지 않은 것 같습니다. 승,

심포니 버전) : 2.1.2

Thnx, 감사합니다 미첼

+0

안녕하세요, 환영에 의해 역할을 할당하는 시도 해 봤나! 이 질문이 더 많은 응답을 얻을 수 있는지 보려면 [security] (http://security.stackexchange.com/)를 살펴보십시오. –

+0

"symfony acl"에 대한 검색 결과가 없습니다. –

답변

0

당신은 사용자

# Object 
$idObjeto = ObjectIdentity::fromDomainObject($blogComment); 

# User 
$idUsuario = UserSecurityIdentity::fromAccount($usuario); 

try { 
    $acl = $this->get('security.acl.provider')->findAcl($idObjeto); 
} catch (\Symfony\Component\Security\Acl\Exception\AclNotFoundException $e) { 
    $acl = $this->get('security.acl.provider')->createAcl($idObjeto); 
} 

$acl->insertObjectAce($idUsuario, MaskBuilder::MASK_OPERATOR); 
$this->get('security.acl.provider')->updateAcl($acl);