From 9bb3542c78a1bb696c85400eb55194ce7cb4a152 Mon Sep 17 00:00:00 2001 From: Kendrick Chan Date: Wed, 10 Jan 2018 13:48:25 +0800 Subject: [PATCH] Add Role ACL to add and update forms --- src/Controller/RoleController.php | 42 +++++++++++++++++++++++++++++++ templates/role/form.html.twig | 22 +++++++++++++++- 2 files changed, 63 insertions(+), 1 deletion(-) diff --git a/src/Controller/RoleController.php b/src/Controller/RoleController.php index 612ed1f0..f527e1f9 100644 --- a/src/Controller/RoleController.php +++ b/src/Controller/RoleController.php @@ -10,8 +10,19 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Validator\Validator\ValidatorInterface; +use App\Menu\Generator as MenuGenerator; +use App\Access\Generator as ACLGenerator; + class RoleController extends BaseController { + protected $acl_gen; + + public function __construct(MenuGenerator $menu_gen, ACLGenerator $acl_gen) + { + $this->acl_gen = $acl_gen; + parent::__construct($menu_gen); + } + public function index() { $params = $this->initParameters('role_list'); @@ -96,9 +107,18 @@ class RoleController extends BaseController ]); } + protected function padACLHierarchy(&$params) + { + // get acl keys hierarchy + $acl_data = $this->acl_gen->getACL(); + $params['acl_hierarchy'] = $acl_data['hierarchy']; + } + public function create() { $params = $this->initParameters('role_list'); + $this->padACLHierarchy($params); + // response return $this->render('role/form.html.twig', $params); @@ -114,6 +134,13 @@ class RoleController extends BaseController $row->setID($req->request->get('id')) ->setName($req->request->get('name')); + // acl attributes + $acl_attribs = $req->request->get('acl'); + foreach ($acl_attribs as $acl_key) + { + $row->addACLAccess($acl_key); + } + // validate $errors = $validator->validate($row); @@ -147,6 +174,7 @@ class RoleController extends BaseController public function update($id) { $params = $this->initParameters('role_list'); + $this->padACLHierarchy($params); // get row data $em = $this->getDoctrine()->getManager(); @@ -177,6 +205,20 @@ class RoleController extends BaseController $row->setID($req->request->get('id')) ->setName($req->request->get('name')); + // don't update acl attributes for super user since they don't need it + if (!$row->isSuperAdmin()) + { + // clear first + $row->clearACLAttributes(); + + // then add + $acl_attribs = $req->request->get('acl'); + foreach ($acl_attribs as $acl_key) + { + $row->addACLAccess($acl_key); + } + } + // validate $errors = $validator->validate($row); diff --git a/templates/role/form.html.twig b/templates/role/form.html.twig index f78faa84..986305d4 100644 --- a/templates/role/form.html.twig +++ b/templates/role/form.html.twig @@ -54,6 +54,26 @@ Display name for this role +
+ +
+
+ {% for acl_layer in acl_hierarchy %} + {{ acl_layer.label }}
+ {% for key, label in acl_layer.acls %} + + {% endfor %} +
+ {% endfor %} +
+
+
@@ -139,4 +159,4 @@ } }); -{% endblock %} \ No newline at end of file +{% endblock %}