baconmanager / acl-bundle
这是symfony2的一个bundle
dev-master
2016-09-02 17:16 UTC
Requires
- baconmanager/core-bundle: ~1.1
This package is not auto-updated.
Last update: 2024-09-14 18:58:41 UTC
README
此bundle负责添加和管理系统ACL功能。
安装
要安装此bundle,只需运行以下命令:
$ composer require baconmanager/acl-bundle
现在在AppKernel.php文件中添加以下bundle:
<?php // app/AppKernel.php public function registerBundles() { // ... new Bacon\Bundle\AclBundle\BaconAclBundle(), // ... }
在文件app/config/config.yml中添加以下配置:
- user_class: 用户实体
- group_class: 用户组实体
- route_redirect_after_save: 保存ACL更改后,它将重定向到该参数的路径
- module_class: 模块实体
- module_actions: 模块动作实体
- module_actions_group: 模块、模块动作和用户组之间的关系实体。
bacon_acl: user_class: Bacon\Custom\UserBundle\Entity\User group_class: Bacon\Custom\UserBundle\Entity\Group route_redirect_after_save: fos_user_group_list configuration: entities: module_class: Bacon\Bundle\AclBundle\Entity\Module module_actions: AppBundle\Entity\ModuleActions module_actions_group: AppBundle\Entity\ModuleActionsGroup
修改FOSUserBundle的bundle配置
fos_user: db_driver: orm firewall_name: admin user_class: Bacon\Custom\UserBundle\Entity\User group: group_class: Bacon\Custom\UserBundle\Entity\Group
注册路由
在文件app/config/routing.yml中添加:
fos_user_group: resource: "@FOSUserBundle/Resources/config/routing/group.xml" prefix: /admin/group bacon_acl_module: resource: "@BaconAclBundle/Controller/" type: annotation prefix: /admin/
声明实体
为了使bundle正常工作,需要创建以下实体,如下在app/config/config.yml文件中配置:
<?php // src/Bacon/Custom/UserBundle/Entity/User.php namespace Bacon\Custom\UserBundle\Entity; use Bacon\Bundle\UserBundle\Entity\User as BaseUser; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity(repositoryClass="Bacon\Custom\UserBundle\Repository\UserRepository") * @ORM\Table(name="auth_user") */ class User extends BaseUser { /** * @ORM\ManyToMany(targetEntity="\Bacon\Custom\UserBundle\Entity\Group") * @ORM\JoinTable(name="auth_user_has_group", * joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}, * inverseJoinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id")} * ) */ protected $groups; public function __construct() { $this->groups = new ArrayCollection(); parent::__construct(); } /** * @return Group */ public function getGroups() { return $this->groups; } /** * @param Group $groups * @return User */ public function setGroups($groups) { $this->groups[] = $groups; return $this; } }
<?php // src/Bacon/Custom/UserBundle/Entity/Group.php namespace Bacon\Custom\UserBundle\Entity; use FOS\UserBundle\Model\Group as BaseGroup; use Doctrine\ORM\Mapping as ORM; use Gedmo\Mapping\Annotation as Gedmo; /** * Class Group * @package Bacon\Custom\UserBundle\Entity * @ORM\Entity() * @ORM\Table(name="auth_group") * @Gedmo\SoftDeleteable(fieldName="deletedAt", timeAware=false) */ class Group extends BaseGroup { /** * @ORM\Column(type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ protected $id; /** * @Gedmo\Timestampable(on="create") * @ORM\Column(name="created_at", type="datetime",nullable=false) */ protected $createdAt; /** * @Gedmo\Timestampable(on="update") * @ORM\Column(name="updated_at", type="datetime",nullable=true) */ protected $updatedAt; /** * @ORM\Column(name="deleted_at", type="datetime", nullable=true) */ protected $deletedAt; /** * @return mixed */ public function getId() { return $this->id; } /** * @param mixed $id * @return Group */ public function setId($id) { $this->id = $id; return $this; } /** * @return mixed */ public function getCreatedAt() { return $this->createdAt; } /** * @param mixed $createdAt * @return Group */ public function setCreatedAt($createdAt) { $this->createdAt = $createdAt; return $this; } /** * @return mixed */ public function getUpdatedAt() { return $this->updatedAt; } /** * @param mixed $updatedAt * @return Group */ public function setUpdatedAt($updatedAt) { $this->updatedAt = $updatedAt; return $this; } /** * @return mixed */ public function getDeletedAt() { return $this->deletedAt; } /** * @param mixed $deletedAt * @return Group */ public function setDeletedAt($deletedAt) { $this->deletedAt = $deletedAt; return $this; } }
<?php // src/AppBundle/Entity/ModuleActions.php namespace AppBundle\Entity; use Bacon\Bundle\AclBundle\Entity\ModuleActions as BaseModuleActions; use Doctrine\ORM\Mapping as ORM; /** * Class ModuleActions * @package AppBundle\Entity * @ORM\Table(name="module_actions") * @ORM\Entity(repositoryClass="AppBundle\Repository\ModuleActionsRepository") */ class ModuleActions extends BaseModuleActions { /** * @ORM\ManyToOne(targetEntity="Bacon\Bundle\AclBundle\Entity\Module") * @ORM\JoinColumn(name="module_id", referencedColumnName="id" ,nullable=false) */ private $module; /** * @return mixed */ public function getModule() { return $this->module; } /** * @param mixed $module */ public function setModule($module) { $this->module = $module; return $this; } }
<?php // src/AppBundle/Entity/ModuleActionsGroup.php use Bacon\Bundle\AclBundle\Model\ModuleActionsGroupInterface; use Bacon\Bundle\CoreBundle\Entity\BaseEntity; use Bacon\Custom\UserBundle\Entity\Group; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity(repositoryClass="AppBundle\Repository\ModuleActionsGroupRepository") * @ORM\Table("module_actions_has_group") */ class ModuleActionsGroup extends BaseEntity implements ModuleActionsGroupInterface { /** * @var boolean * @ORM\Column(name="enabled", type="boolean", options={"default" : 0}, nullable=false) */ private $enabled; /** * @var Group * * @ORM\ManyToOne(targetEntity="\Bacon\Custom\UserBundle\Entity\Group") * @ORM\JoinColumn(name="group_id", referencedColumnName="id" ,nullable=false) */ private $group; /** * @var \Bacon\Bundle\AclBundle\Entity\Module * * @ORM\ManyToOne(targetEntity="Bacon\Bundle\AclBundle\Entity\Module") * @ORM\JoinColumn(name="module_id", referencedColumnName="id", nullable=false) */ private $module; /** * @var \AppBundle\Entity\ModuleActions * * @ORM\ManyToOne(targetEntity="AppBundle\Entity\ModuleActions") * @ORM\JoinColumn(name="module_actions_id", referencedColumnName="id" ,nullable=false) */ private $moduleActions; /** * @return boolean */ public function getEnabled() { return $this->enabled; } /** * @param boolean $enabled * @return ModuleActionsUsers */ public function setEnabled($enabled) { $this->enabled = $enabled; return $this; } /** * @return Group */ public function getGroup() { return $this->group; } /** * @param Group $group * @return ModuleActionsUsers */ public function setGroup($group) { $this->group = $group; return $this; } /** * @return \Bacon\Bundle\AclBundle\Entity\Module */ public function getModule() { return $this->module; } /** * @param \Bacon\Bundle\AclBundle\Entity\Module $module * @return ModuleActionsUsers */ public function setModule($module) { $this->module = $module; return $this; } /** * @return ModuleActions */ public function getModuleActions() { return $this->moduleActions; } /** * @param ModuleActions $moduleActions * @return ModuleActionsUsers */ public function setModuleActions($moduleActions) { $this->moduleActions = $moduleActions; return $this; } }
声明存储库
根据实体配置声明存储库。
<?php // src/AppBundle/Repository/ModuleActions.php namespace AppBundle\Repository; use Bacon\Bundle\AclBundle\Repository\ModuleActionsGetPagination; use Bacon\Bundle\AclBundle\Repository\ModuleActionsRepositoryInterface; use Doctrine\ORM\EntityRepository; class ModuleActionsRepository extends EntityRepository implements ModuleActionsRepositoryInterface { use ModuleActionsGetPagination; }
<?php // src/AppBundle/Repository/ModuleActionsGroupRepository.php use Bacon\Bundle\AclBundle\Repository\ModuleActionsGroupInterface as ModuleActionsGroupRepositoryInterface; use Bacon\Bundle\AclBundle\Repository\ModuleActionsRepositoryInterface; use Doctrine\ORM\EntityRepository; use Bacon\Bundle\AclBundle\Repository\HasAuthorationRepository; use FOS\UserBundle\Model\GroupInterface; /** * Class ModuleActionsGroupRepository * @package AppBundle\Repository */ class ModuleActionsGroupRepository extends EntityRepository implements ModuleActionsGroupRepositoryInterface { use HasAuthorationRepository; }