ACL ROLE_ADMIN 不起作用
Posted
技术标签:
【中文标题】ACL ROLE_ADMIN 不起作用【英文标题】:ACL ROLE_ADMIN does not work 【发布时间】:2012-09-09 17:13:51 【问题描述】:也许这里有人可以帮助我。 我正在添加博客 cmets 并为其添加权限。
创建博客的用户权限正常。 未登录用户的权限可以查看评论,这样就可以了。 管理员无法编辑/删除评论...但是怎么了?部分控制器代码:
// 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);
Symfony 分析器安全性
Username Mitchel
Authenticated? yes
Roles [ROLE_ADMIN]
数据库转储:
-- 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;
我还在symfony论坛上创建了一个主题,但似乎没有***那么活跃;)
Symfony 版本:2.1.2
谢谢, 问候米切尔
【问题讨论】:
您好,欢迎您!您也可以尝试查看security,看看这个问题是否会在那里得到更多回复。 “symfony acl”没有匹配结果 【参考方案1】:您是否尝试过按用户分配角色
# 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);
【讨论】:
以上是关于ACL ROLE_ADMIN 不起作用的主要内容,如果未能解决你的问题,请参考以下文章