mirror of
https://github.com/Part-DB/Part-DB-server.git
synced 2025-06-22 01:49:05 +02:00
Added an admin page for the user groups.
This commit is contained in:
parent
959e79b9fb
commit
856e20586f
6 changed files with 275 additions and 6 deletions
119
src/Controller/GroupController.php
Normal file
119
src/Controller/GroupController.php
Normal file
|
@ -0,0 +1,119 @@
|
|||
<?php
|
||||
/**
|
||||
*
|
||||
* part-db version 0.1
|
||||
* Copyright (C) 2005 Christoph Lechner
|
||||
* http://www.cl-projects.de/
|
||||
*
|
||||
* part-db version 0.2+
|
||||
* Copyright (C) 2009 K. Jacobs and others (see authors.php)
|
||||
* http://code.google.com/p/part-db/
|
||||
*
|
||||
* Part-DB Version 0.4+
|
||||
* Copyright (C) 2016 - 2019 Jan Böhmer
|
||||
* https://github.com/jbtronics
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*
|
||||
*/
|
||||
|
||||
namespace App\Controller;
|
||||
|
||||
|
||||
use App\Controller\AdminPages\BaseAdminController;
|
||||
use App\Entity\Parts\Category;
|
||||
use App\Entity\UserSystem\Group;
|
||||
use App\Form\AdminPages\CategoryAdminForm;
|
||||
use App\Form\AdminPages\GroupAdminForm;
|
||||
use App\Services\EntityExporter;
|
||||
use App\Services\EntityImporter;
|
||||
use App\Services\StructuralElementRecursionHelper;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
/**
|
||||
* @Route("/group")
|
||||
*/
|
||||
class GroupController extends BaseAdminController
|
||||
{
|
||||
protected $entity_class = Group::class;
|
||||
protected $twig_template = 'AdminPages/GroupAdmin.html.twig';
|
||||
protected $form_class = GroupAdminForm::class;
|
||||
protected $route_base = 'group';
|
||||
|
||||
/**
|
||||
* @Route("/{id}/edit", requirements={"id"="\d+"}, name="group_edit")
|
||||
* @Route("/{id}/", requirements={"id"="\d+"})
|
||||
* @param Group $entity
|
||||
* @param Request $request
|
||||
* @param EntityManagerInterface $em
|
||||
* @return Response
|
||||
*/
|
||||
public function edit(Group $entity, Request $request, EntityManagerInterface $em)
|
||||
{
|
||||
return $this->_edit($entity, $request, $em);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/new", name="group_new")
|
||||
* @Route("/")
|
||||
* @param Request $request
|
||||
* @param EntityManagerInterface $em
|
||||
* @param EntityImporter $importer
|
||||
* @return Response
|
||||
*/
|
||||
public function new(Request $request, EntityManagerInterface $em, EntityImporter $importer)
|
||||
{
|
||||
return $this->_new($request, $em, $importer);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/{id}", name="group_delete", methods={"DELETE"})
|
||||
* @param Request $request
|
||||
* @param Group $entity
|
||||
* @param StructuralElementRecursionHelper $recursionHelper
|
||||
* @return \Symfony\Component\HttpFoundation\RedirectResponse
|
||||
*/
|
||||
public function delete(Request $request, Group $entity, StructuralElementRecursionHelper $recursionHelper)
|
||||
{
|
||||
return $this->_delete($request, $entity, $recursionHelper);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/export", name="group_export_all")
|
||||
* @param EntityManagerInterface $em
|
||||
* @param EntityExporter $exporter
|
||||
* @param Request $request
|
||||
* @return Response
|
||||
*/
|
||||
public function exportAll(EntityManagerInterface $em, EntityExporter $exporter, Request $request)
|
||||
{
|
||||
return $this->_exportAll($em, $exporter, $request);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/{id}/export", name="group_export")
|
||||
* @param Group $entity
|
||||
* @param EntityExporter $exporter
|
||||
* @param Request $request
|
||||
* @return Response
|
||||
*/
|
||||
public function exportEntity(Group $entity, EntityExporter $exporter, Request $request)
|
||||
{
|
||||
return $this->_exportEntity($entity, $exporter, $request);
|
||||
}
|
||||
}
|
49
src/Form/AdminPages/GroupAdminForm.php
Normal file
49
src/Form/AdminPages/GroupAdminForm.php
Normal file
|
@ -0,0 +1,49 @@
|
|||
<?php
|
||||
/**
|
||||
*
|
||||
* part-db version 0.1
|
||||
* Copyright (C) 2005 Christoph Lechner
|
||||
* http://www.cl-projects.de/
|
||||
*
|
||||
* part-db version 0.2+
|
||||
* Copyright (C) 2009 K. Jacobs and others (see authors.php)
|
||||
* http://code.google.com/p/part-db/
|
||||
*
|
||||
* Part-DB Version 0.4+
|
||||
* Copyright (C) 2016 - 2019 Jan Böhmer
|
||||
* https://github.com/jbtronics
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*
|
||||
*/
|
||||
|
||||
namespace App\Form\AdminPages;
|
||||
|
||||
|
||||
use App\Entity\Base\NamedDBElement;
|
||||
use App\Form\Permissions\PermissionsType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
|
||||
class GroupAdminForm extends BaseEntityAdminForm
|
||||
{
|
||||
protected function additionalFormElements(FormBuilderInterface $builder, array $options, NamedDBElement $entity)
|
||||
{
|
||||
$builder->add('permissions', PermissionsType::class, [
|
||||
'mapped' => false,
|
||||
'data' => $builder->getData(),
|
||||
'disabled' => !$this->security->isGranted('edit_permissions', $entity)
|
||||
]);
|
||||
}
|
||||
}
|
76
src/Security/Voter/GroupVoter.php
Normal file
76
src/Security/Voter/GroupVoter.php
Normal file
|
@ -0,0 +1,76 @@
|
|||
<?php
|
||||
/**
|
||||
*
|
||||
* part-db version 0.1
|
||||
* Copyright (C) 2005 Christoph Lechner
|
||||
* http://www.cl-projects.de/
|
||||
*
|
||||
* part-db version 0.2+
|
||||
* Copyright (C) 2009 K. Jacobs and others (see authors.php)
|
||||
* http://code.google.com/p/part-db/
|
||||
*
|
||||
* Part-DB Version 0.4+
|
||||
* Copyright (C) 2016 - 2019 Jan Böhmer
|
||||
* https://github.com/jbtronics
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*
|
||||
*/
|
||||
|
||||
namespace App\Security\Voter;
|
||||
|
||||
|
||||
use App\Entity\UserSystem\Group;
|
||||
use App\Entity\UserSystem\User;
|
||||
|
||||
class GroupVoter extends ExtendedVoter
|
||||
{
|
||||
|
||||
/**
|
||||
* Similar to voteOnAttribute, but checking for the anonymous user is already done.
|
||||
* The current user (or the anonymous user) is passed by $user.
|
||||
*
|
||||
* @param $attribute
|
||||
* @param $subject
|
||||
* @param User $user
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
protected function voteOnUser($attribute, $subject, User $user): bool
|
||||
{
|
||||
if ($subject instanceof Group) {
|
||||
return $this->resolver->inherit($user,'groups', $attribute) ?? false;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines if the attribute and subject are supported by this voter.
|
||||
*
|
||||
* @param string $attribute An attribute
|
||||
* @param mixed $subject The subject to secure, e.g. an object the user wants to access or any other PHP type
|
||||
*
|
||||
* @return bool True if the attribute and subject are supported, false otherwise
|
||||
*/
|
||||
protected function supports($attribute, $subject)
|
||||
{
|
||||
if ($subject instanceof Group) {
|
||||
return $this->resolver->isValidOperation('groups', $attribute);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -42,6 +42,7 @@ use App\Entity\Parts\Part;
|
|||
use App\Entity\Parts\Storelocation;
|
||||
use App\Entity\Parts\Supplier;
|
||||
use App\Entity\PriceInformations\Currency;
|
||||
use App\Entity\UserSystem\Group;
|
||||
use App\Entity\UserSystem\User;
|
||||
use App\Exceptions\EntityNotSupported;
|
||||
use Symfony\Component\HttpKernel\HttpCache\Store;
|
||||
|
@ -196,7 +197,8 @@ class EntityURLGenerator
|
|||
Footprint::class => 'footprint_edit',
|
||||
User::class => 'user_edit',
|
||||
Currency::class => 'currency_edit',
|
||||
MeasurementUnit::class => 'measurement_unit_edit'
|
||||
MeasurementUnit::class => 'measurement_unit_edit',
|
||||
Group::class => 'group_edit'
|
||||
];
|
||||
|
||||
return $this->urlGenerator->generate($this->mapToController($map, $entity), ['id' => $entity->getID()]);
|
||||
|
@ -222,7 +224,8 @@ class EntityURLGenerator
|
|||
Footprint::class => 'footprint_new',
|
||||
User::class => 'user_new',
|
||||
Currency::class => 'currency_new',
|
||||
MeasurementUnit::class => 'measurement_unit_new'
|
||||
MeasurementUnit::class => 'measurement_unit_new',
|
||||
Group::class => 'group_new'
|
||||
];
|
||||
|
||||
return $this->urlGenerator->generate($this->mapToController($map, $entity));
|
||||
|
@ -278,7 +281,8 @@ class EntityURLGenerator
|
|||
Footprint::class => 'footprint_delete',
|
||||
User::class => 'user_delete',
|
||||
Currency::class => 'currency_delete',
|
||||
MeasurementUnit::class => 'measurement_unit_delete'
|
||||
MeasurementUnit::class => 'measurement_unit_delete',
|
||||
Group::class => 'group_delete'
|
||||
];
|
||||
|
||||
return $this->urlGenerator->generate($this->mapToController($map, $entity), ['id' => $entity->getID()]);
|
||||
|
|
|
@ -136,12 +136,16 @@ class ToolsTreeBuilder
|
|||
*/
|
||||
protected function getSystemNodes() : array
|
||||
{
|
||||
$edit_nodes = array();
|
||||
$nodes = array();
|
||||
|
||||
$edit_nodes[] = new TreeViewNode($this->translator->trans('tree.tools.system.users'),
|
||||
$nodes[] = new TreeViewNode($this->translator->trans('tree.tools.system.users'),
|
||||
$this->urlGenerator->generate("user_new")
|
||||
);
|
||||
|
||||
return $edit_nodes;
|
||||
$nodes[] = new TreeViewNode($this->translator->trans('tree.tools.system.groups'),
|
||||
$this->urlGenerator->generate('group_new')
|
||||
);
|
||||
|
||||
return $nodes;
|
||||
}
|
||||
}
|
||||
|
|
17
templates/AdminPages/GroupAdmin.html.twig
Normal file
17
templates/AdminPages/GroupAdmin.html.twig
Normal file
|
@ -0,0 +1,17 @@
|
|||
{% extends "AdminPages/EntityAdminBase.html.twig" %}
|
||||
|
||||
{% block card_title %}
|
||||
<i class="fas fa-users fa-fw"></i> {% trans %}group.edit.caption{% endtrans %}
|
||||
{% endblock %}
|
||||
|
||||
|
||||
{% block additional_pills %}
|
||||
<li class="nav-item"><a data-toggle="tab" class="nav-link link-anchor" href="#tab_permissions">{% trans %}user.edit.permissions{% endtrans %}</a></li>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
{% block additional_panes %}
|
||||
<div class="tab-pane" id="tab_permissions">
|
||||
{{ form_row(form.permissions) }}
|
||||
</div>
|
||||
{% endblock %}
|
Loading…
Add table
Add a link
Reference in a new issue