這裏是我如何解決它(我提交了PR後,這已成爲Symfony的2.3更容易):
擴展現有MaskBuilder用自己的面具:
namespace Acme\DemoBundle\Security\Acl\Permission;
use Symfony\Component\Security\Acl\Permission\MaskBuilder as BaseMaskBuilder;
class MaskBuilder extends BaseMaskBuilder
{
const MASK_COPY = 256; // 1 << 8
const MASK_REVIEW = 512; // 1 << 9
const CODE_COPY = 'X';
const CODE_REVIEW = 'R';
}
擴展現有PermissionMap(你過去必須完全覆蓋它,因爲一切都設置爲私人)。
namespace Acme\DemoBundle\Security\Acl\Permission;
use Symfony\Component\Security\Acl\Permission\BasicPermissionMap;
class PermissionMap extends BasicPermissionMap
{
const PERMISSION_COPY = 'COPY';
const PERMISSION_REVIEW = 'REVIEW';
public function __construct()
{
parent::__construct();
// This basically says "If you have VIEW, REVIEW, EDIT..., OWNER,
// you have VIEW".
$this->map[self::PERMISSION_VIEW] = array(
MaskBuilder::MASK_VIEW,
MaskBuilder::MASK_REVIEW,
MaskBuilder::MASK_EDIT,
MaskBuilder::MASK_COPY,
MaskBuilder::MASK_OPERATOR,
MaskBuilder::MASK_MASTER,
MaskBuilder::MASK_OWNER,
);
$this->map[self::PERMISSION_COPY] = array(
MaskBuilder::MASK_COPY,
MaskBuilder::MASK_OPERATOR,
MaskBuilder::MASK_MASTER,
MaskBuilder::MASK_OWNER,
);
$this->map[self::PERMISSION_REVIEW] = array(
MaskBuilder::MASK_REVIEW,
MaskBuilder::MASK_OPERATOR,
MaskBuilder::MASK_MASTER,
MaskBuilder::MASK_OWNER,
);
}
}
不要問我爲什麼你必須包括相同的權限。
最後,你需要告訴Symfony的使用您的PermissionMap在config.yml
:
parameters:
security.acl.permission.map.class: Acme\DemoBundle\Security\Acl\Permission\PermissionMap
這爲我做。
我認爲COPY和REVIEW權限是更好的角色。我想要考慮哪些操作沒有被標準ACL涵蓋,但是不能看到。 COPY〜=查看。作爲一個角色,任何可以查看對象的用戶都可以創建它的新副本。審查也許是查看和刪除的組成? –
你是如何覆蓋參數的?什麼是確切的錯誤? –
我已經設法找到了解決辦法,並且很快就會發布答案。 COPY和REVIEW不可能作爲對象所有者可以說的「這個項目可以被這個用戶複製,這個項目可以被審查,這個項目可以被查看,並且這個項目可以被修改」。 – Bram