* [ADD] Default permissions rewritten to make a more generic approach. Now it can manage multiple items/modules default values from the same view, so it's called Items Preset.

* [MOD] Code refactoring
This commit is contained in:
nuxsmin
2018-08-30 16:19:18 +02:00
parent 7ceb3afe56
commit 2fc71e87dc
52 changed files with 1447 additions and 933 deletions

View File

@@ -831,38 +831,38 @@
</action>
<action multiple="1">
<id>1801</id>
<name>ACCOUNT_DEFAULT_PERMISSION</name>
<name>ITEMPRESET</name>
<text>Gestión Permisos</text>
<route>accountDefaultPermission/index</route>
<route>itemPreset/index</route>
</action>
<action multiple="1">
<id>1802</id>
<name>ACCOUNT_DEFAULT_PERMISSION_SEARCH</name>
<name>ITEMPRESET_SEARCH</name>
<text>Buscar Permiso</text>
<route>accountDefaultPermission/search</route>
<route>itemPreset/search</route>
</action>
<action multiple="1">
<id>1803</id>
<name>ACCOUNT_DEFAULT_PERMISSION_VIEW</name>
<name>ITEMPRESET_VIEW</name>
<text>Ver Permiso</text>
<route>accountDefaultPermission/view</route>
<route>itemPreset/view</route>
</action>
<action multiple="1">
<id>1804</id>
<name>ACCOUNT_DEFAULT_PERMISSION_CREATE</name>
<name>ITEMPRESET_CREATE</name>
<text>Nuevo Permiso</text>
<route>accountDefaultPermission/create</route>
<route>itemPreset/create</route>
</action>
<action multiple="1">
<id>1805</id>
<name>ACCOUNT_DEFAULT_PERMISSION_EDIT</name>
<name>ITEMPRESET_EDIT</name>
<text>Editar Permiso</text>
<route>accountDefaultPermission/edit</route>
<route>itemPreset/edit</route>
</action>
<action multiple="1">
<id>1806</id>
<name>ACCOUNT_DEFAULT_PERMISSION_DELETE</name>
<name>ITEMPRESET_DELETE</name>
<text>Eliminar Permiso</text>
<route>accountDefaultPermission/delete</route>
<route>itemPreset/delete</route>
</action>
</actions>

File diff suppressed because it is too large Load Diff

View File

@@ -27,14 +27,12 @@ namespace SP\Modules\Web\Controllers;
use SP\Core\Acl\Acl;
use SP\Core\Events\Event;
use SP\DataModel\ItemSearchData;
use SP\Modules\Web\Controllers\Helpers\Grid\AccountDefaultPermissionGrid;
use SP\Modules\Web\Controllers\Helpers\Grid\AuthTokenGrid;
use SP\Modules\Web\Controllers\Helpers\Grid\PublicLinkGrid;
use SP\Modules\Web\Controllers\Helpers\Grid\UserGrid;
use SP\Modules\Web\Controllers\Helpers\Grid\UserGroupGrid;
use SP\Modules\Web\Controllers\Helpers\Grid\UserProfileGrid;
use SP\Modules\Web\Controllers\Helpers\TabsGridHelper;
use SP\Services\Account\AccountDefaultPermissionService;
use SP\Services\AuthToken\AuthTokenService;
use SP\Services\PublicLink\PublicLinkService;
use SP\Services\User\UserService;
@@ -91,10 +89,6 @@ final class AccessManagerController extends ControllerBase
$this->tabsGridHelper->addTab($this->getUsersProfileList());
}
if ($this->checkAccess(Acl::ACCOUNT_DEFAULT_PERMISSION)) {
$this->tabsGridHelper->addTab($this->getAccountDefaultPermissionList());
}
if ($this->checkAccess(Acl::AUTHTOKEN)) {
$this->tabsGridHelper->addTab($this->getApiTokensList());
}
@@ -181,20 +175,6 @@ final class AccessManagerController extends ControllerBase
->updatePager();
}
/**
* Returns API tokens data tab
*
* @return \SP\Html\DataGrid\DataGridTab
* @throws \SP\Core\Exceptions\ConstraintException
* @throws \SP\Core\Exceptions\QueryException
*/
protected function getAccountDefaultPermissionList()
{
return $this->dic->get(AccountDefaultPermissionGrid::class)
->getGrid($this->dic->get(AccountDefaultPermissionService::class)->search($this->itemSearchData))
->updatePager();
}
/**
* @return TabsGridHelper
*/

View File

@@ -39,12 +39,12 @@ use SP\Mvc\View\Components\SelectItemAdapter;
use SP\Repositories\NoSuchItemException;
use SP\Services\Account\AccountAcl;
use SP\Services\Account\AccountAclService;
use SP\Services\Account\AccountDefaultPermissionService;
use SP\Services\Account\AccountHistoryService;
use SP\Services\Account\AccountService;
use SP\Services\Category\CategoryService;
use SP\Services\Client\ClientService;
use SP\Services\Crypt\MasterPassService;
use SP\Services\ItemPreset\ItemPresetInterface;
use SP\Services\PublicLink\PublicLinkService;
use SP\Services\Tag\TagService;
use SP\Services\User\UpdatedMasterPassException;
@@ -77,9 +77,9 @@ final class AccountHelper extends HelperBase
*/
private $publicLinkService;
/**
* @var AccountDefaultPermissionService
* @var \SP\Services\ItemPreset\ItemPresetService
*/
private $accountDefaultPermissionService;
private $itemPresetService;
/**
* @var string
*/
@@ -306,6 +306,7 @@ final class AccountHelper extends HelperBase
* @throws \SP\Core\Exceptions\ConstraintException
* @throws \SP\Core\Exceptions\QueryException
* @throws \SP\Services\ServiceException
* @throws \SP\Core\Exceptions\NoSuchPropertyException
*/
public function setViewForBlank($actionId)
{
@@ -319,8 +320,8 @@ final class AccountHelper extends HelperBase
$this->accountAcl->setShowPermission($userData->getIsAdminApp() || $userData->getIsAdminAcc() || $userProfileData->isAccPermission());
$accountDefaultPermission = $this->accountDefaultPermissionService->getForCurrentUser();
$accountPermission = $accountDefaultPermission !== null ? $accountDefaultPermission->getAccountPermission() : new AccountPermission();
$accountPermission = $this->itemPresetService->getForCurrentUser(ItemPresetInterface::ITEM_TYPE_PERMISSION)
->hydrate(AccountPermission::class, 'data') ?: new AccountPermission();
$selectUsers = SelectItemAdapter::factory(UserService::getItemsBasic());
$selectUserGroups = SelectItemAdapter::factory(UserGroupService::getItemsBasic());
@@ -394,7 +395,7 @@ final class AccountHelper extends HelperBase
$this->accountService = $this->dic->get(AccountService::class);
$this->accountHistoryService = $this->dic->get(AccountHistoryService::class);
$this->publicLinkService = $this->dic->get(PublicLinkService::class);
$this->accountDefaultPermissionService = $this->dic->get(AccountDefaultPermissionService::class);
$this->itemPresetService = $this->dic->get(\SP\Services\ItemPreset\ItemPresetService::class);
$this->view->assign('changesHash');
$this->view->assign('chkUserEdit');

View File

@@ -63,10 +63,8 @@ final class AccountGrid extends GridBase
$grid->setDataActions($this->getSearchAction());
$grid->setPager($this->getPager($searchAction));
$deleteAction = $this->getDeleteAction();
$grid->setDataActions($deleteAction);
$grid->setDataActions($deleteAction, true);
$grid->setDataActions($this->getDeleteAction());
$grid->setDataActions($this->getDeleteAction()->setTitle(__('Eliminar Seleccionados')), true);
$grid->setTime(round(getElapsedTime($this->queryTimeStart), 5));

View File

@@ -64,11 +64,8 @@ final class AccountHistoryGrid extends GridBase
$grid->setPager($this->getPager($searchAction));
$grid->setDataActions($this->getRestoreAction());
$deleteAction = $this->getDeleteAction();
$grid->setDataActions($deleteAction);
$grid->setDataActions($deleteAction, true);
$grid->setDataActions($this->getDeleteAction());
$grid->setDataActions($this->getDeleteAction()->setTitle(__('Eliminar Seleccionados')), true);
$grid->setTime(round(getElapsedTime($this->queryTimeStart), 5));

View File

@@ -67,11 +67,8 @@ final class AuthTokenGrid extends GridBase
$grid->setDataActions($this->getCreateAction());
$grid->setDataActions($this->getViewAction());
$grid->setDataActions($this->getEditAction());
$deleteAction = $this->getDeleteAction();
$grid->setDataActions($deleteAction);
$grid->setDataActions($deleteAction, true);
$grid->setDataActions($this->getDeleteAction());
$grid->setDataActions($this->getDeleteAction()->setTitle(__('Eliminar Seleccionados')), true);
$grid->setTime(round(getElapsedTime($this->queryTimeStart), 5));

View File

@@ -63,13 +63,11 @@ final class CategoryGrid extends GridBase
$grid->setDataActions($this->getSearchAction());
$grid->setPager($this->getPager($searchAction));
$grid->setDataActions($this->getCreateAction());
$grid->setDataActions($this->getEditAction());
$deleteAction = $this->getDeleteAction();
$grid->setDataActions($deleteAction);
$grid->setDataActions($deleteAction, true);
$grid->setDataActions($this->getDeleteAction());
$grid->setDataActions($this->getDeleteAction()->setTitle(__('Eliminar Seleccionados')), true);
$grid->setTime(round(getElapsedTime($this->queryTimeStart), 5));

View File

@@ -62,13 +62,11 @@ final class ClientGrid extends GridBase
$grid->setDataActions($this->getSearchAction());
$grid->setPager($this->getPager($searchAction));
$grid->setDataActions($this->getCreateAction());
$grid->setDataActions($this->getEditAction());
$deleteAction = $this->getDeleteAction();
$grid->setDataActions($deleteAction);
$grid->setDataActions($deleteAction, true);
$grid->setDataActions($this->getDeleteAction());
$grid->setDataActions($this->getDeleteAction()->setTitle(__('Eliminar Seleccionados')), true);
$grid->setTime(round(getElapsedTime($this->queryTimeStart), 5));

View File

@@ -63,13 +63,12 @@ final class CustomFieldGrid extends GridBase
$grid->setDataActions($this->getSearchAction());
$grid->setPager($this->getPager($searchAction));
$grid->setDataActions($this->getCreateAction());
$grid->setDataActions($this->getEditAction());
$grid->setDataActions($this->getDeleteAction());
$grid->setDataActions($this->getDeleteAction()->setTitle(__('Eliminar Seleccionados')), true);
$deleteAction = $this->getDeleteAction();
$grid->setDataActions($deleteAction);
$grid->setDataActions($deleteAction, true);
$grid->setTime(round(getElapsedTime($this->queryTimeStart), 5));

View File

@@ -62,13 +62,12 @@ final class FileGrid extends GridBase
$grid->setDataActions($this->getSearchAction());
$grid->setPager($this->getPager($searchAction));
$grid->setDataActions($this->getViewAction());
$grid->setDataActions($this->getDownloadAction());
$grid->setDataActions($this->getDeleteAction());
$grid->setDataActions($this->getDeleteAction()->setTitle(__('Eliminar Seleccionados')), true);
$deleteAction = $this->getDeleteAction();
$grid->setDataActions($deleteAction);
$grid->setDataActions($deleteAction, true);
$grid->setTime(round(getElapsedTime($this->queryTimeStart), 5));

View File

@@ -2,8 +2,8 @@
/**
* sysPass
*
* @author nuxsmin
* @link https://syspass.org
* @author nuxsmin
* @link https://syspass.org
* @copyright 2012-2018, Rubén Domínguez nuxsmin@$syspass.org
*
* This file is part of sysPass.
@@ -40,7 +40,7 @@ use SP\Storage\Database\QueryResult;
*
* @package SP\Modules\Web\Controllers\Helpers\Grid
*/
final class AccountDefaultPermissionGrid extends GridBase
final class ItemPresetGrid extends GridBase
{
/**
* @var QueryResult
@@ -62,13 +62,11 @@ final class AccountDefaultPermissionGrid extends GridBase
$grid->setDataActions($this->getSearchAction());
$grid->setPager($this->getPager($searchAction));
$grid->setDataActions($this->getCreateAction());
$grid->setDataActions($this->getCreatePermissionAction(), true);
$grid->setDataActions($this->getEditAction());
$deleteAction = $this->getDeleteAction();
$grid->setDataActions($deleteAction);
$grid->setDataActions($deleteAction, true);
$grid->setDataActions($this->getDeleteAction());
$grid->setDataActions($this->getDeleteAction()->setTitle(__('Eliminar Seleccionados')), true);
$grid->setTime(round(getElapsedTime($this->queryTimeStart), 5));
@@ -82,12 +80,12 @@ final class AccountDefaultPermissionGrid extends GridBase
{
// Grid
$gridTab = new DataGridTab($this->view->getTheme());
$gridTab->setId('tblAccountDefaultPermission');
$gridTab->setId('tblItemPreset');
$gridTab->setDataRowTemplate('datagrid-rows', 'grid');
$gridTab->setDataPagerTemplate('datagrid-nav-full', 'grid');
$gridTab->setHeader($this->getHeader());
$gridTab->setData($this->getData());
$gridTab->setTitle(__('Permisos por Defecto'));
$gridTab->setTitle(__('Valores por Defecto'));
return $gridTab;
}
@@ -99,6 +97,7 @@ final class AccountDefaultPermissionGrid extends GridBase
{
// Grid Header
$gridHeader = new DataGridHeader();
$gridHeader->addHeader(__('Tipo'));
$gridHeader->addHeader(__('Usuario'));
$gridHeader->addHeader(__('Grupo'));
$gridHeader->addHeader(__('Perfil'));
@@ -116,6 +115,7 @@ final class AccountDefaultPermissionGrid extends GridBase
// Grid Data
$gridData = new DataGridData();
$gridData->setDataRowSourceId('id');
$gridData->addDataRowSource('type');
$gridData->addDataRowSource('userName');
$gridData->addDataRowSource('userGroupName');
$gridData->addDataRowSource('userProfileName');
@@ -135,12 +135,12 @@ final class AccountDefaultPermissionGrid extends GridBase
{
// Grid Actions
$gridActionSearch = new DataGridActionSearch();
$gridActionSearch->setId(ActionsInterface::ACCOUNT_DEFAULT_PERMISSION_SEARCH);
$gridActionSearch->setId(ActionsInterface::ITEMPRESET_SEARCH);
$gridActionSearch->setType(DataGridActionType::SEARCH_ITEM);
$gridActionSearch->setName('frmSearchPermission');
$gridActionSearch->setTitle(__('Buscar Permiso'));
$gridActionSearch->setTitle(__('Buscar Valor'));
$gridActionSearch->setOnSubmitFunction('appMgmt/search');
$gridActionSearch->addData('action-route', Acl::getActionRoute(ActionsInterface::ACCOUNT_DEFAULT_PERMISSION_SEARCH));
$gridActionSearch->addData('action-route', Acl::getActionRoute(ActionsInterface::ITEMPRESET_SEARCH));
return $gridActionSearch;
}
@@ -148,17 +148,20 @@ final class AccountDefaultPermissionGrid extends GridBase
/**
* @return DataGridAction
*/
private function getCreateAction()
private function getCreatePermissionAction()
{
$gridAction = new DataGridAction();
$gridAction->setId(ActionsInterface::ACCOUNT_DEFAULT_PERMISSION_CREATE);
$gridAction->setId(ActionsInterface::ITEMPRESET_CREATE);
$gridAction->setType(DataGridActionType::MENUBAR_ITEM);
$gridAction->setName(__('Nuevo Permiso'));
$gridAction->setTitle(__('Nuevo Permiso'));
$gridAction->setIcon($this->icons->getIconAdd());
$icon = clone $this->icons->getIconAdd();
$gridAction->setIcon($icon->setIcon('add_circle'));
$gridAction->setSkip(true);
$gridAction->setOnClickFunction('appMgmt/show');
$gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::ACCOUNT_DEFAULT_PERMISSION_CREATE));
$gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::ITEMPRESET_CREATE) . '/permission');
return $gridAction;
}
@@ -169,13 +172,13 @@ final class AccountDefaultPermissionGrid extends GridBase
private function getEditAction()
{
$gridAction = new DataGridAction();
$gridAction->setId(ActionsInterface::ACCOUNT_DEFAULT_PERMISSION_EDIT);
$gridAction->setId(ActionsInterface::ITEMPRESET_EDIT);
$gridAction->setType(DataGridActionType::EDIT_ITEM);
$gridAction->setName(__('Editar Permiso'));
$gridAction->setTitle(__('Editar Permiso'));
$gridAction->setName(__('Editar Valor'));
$gridAction->setTitle(__('Editar Valor'));
$gridAction->setIcon($this->icons->getIconEdit());
$gridAction->setOnClickFunction('appMgmt/show');
$gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::ACCOUNT_DEFAULT_PERMISSION_EDIT));
$gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::ITEMPRESET_EDIT));
return $gridAction;
}
@@ -186,13 +189,13 @@ final class AccountDefaultPermissionGrid extends GridBase
private function getDeleteAction()
{
$gridAction = new DataGridAction();
$gridAction->setId(ActionsInterface::ACCOUNT_DEFAULT_PERMISSION_DELETE);
$gridAction->setId(ActionsInterface::ITEMPRESET_DELETE);
$gridAction->setType(DataGridActionType::DELETE_ITEM);
$gridAction->setName(__('Eliminar Permiso'));
$gridAction->setTitle(__('Eliminar Permiso'));
$gridAction->setName(__('Eliminar Valor'));
$gridAction->setTitle(__('Eliminar Valor'));
$gridAction->setIcon($this->icons->getIconDelete());
$gridAction->setOnClickFunction('appMgmt/delete');
$gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::ACCOUNT_DEFAULT_PERMISSION_DELETE));
$gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::ITEMPRESET_DELETE));
return $gridAction;
}

View File

@@ -79,11 +79,9 @@ final class NotificationGrid extends GridBase
$grid->setDataActions($this->getViewAction());
$grid->setDataActions($this->setNonAdminFilter($this->getCheckAction()));
$grid->setDataActions($this->setNonAdminFilter($this->getEditAction()));
$grid->setDataActions($this->setNonAdminFilter($this->getDeleteAction()));
$grid->setDataActions($this->setNonAdminFilter($this->getDeleteAction())->setTitle(__('Eliminar Seleccionados')), true);
$deleteAction = $this->setNonAdminFilter($this->getDeleteAction());
$grid->setDataActions($deleteAction);
$grid->setDataActions($deleteAction, true);
$grid->setTime(round(getElapsedTime($this->queryTimeStart), 5));

View File

@@ -67,11 +67,9 @@ final class PublicLinkGrid extends GridBase
$grid->setDataActions($this->getCreateAction());
$grid->setDataActions($this->getViewAction());
$grid->setDataActions($this->getRefreshAction());
$grid->setDataActions($this->getDeleteAction());
$grid->setDataActions($this->getDeleteAction()->setTitle(__('Eliminar Seleccionados')), true);
$deleteAction = $this->getDeleteAction();
$grid->setDataActions($deleteAction);
$grid->setDataActions($deleteAction, true);
$grid->setTime(round(getElapsedTime($this->queryTimeStart), 5));

View File

@@ -63,13 +63,11 @@ final class TagGrid extends GridBase
$grid->setDataActions($this->getSearchAction());
$grid->setPager($this->getPager($searchAction));
$grid->setDataActions($this->getCreateAction());
$grid->setDataActions($this->getEditAction());
$deleteAction = $this->getDeleteAction();
$grid->setDataActions($deleteAction);
$grid->setDataActions($deleteAction, true);
$grid->setDataActions($this->getDeleteAction());
$grid->setDataActions($this->getDeleteAction()->setTitle(__('Eliminar Seleccionados')), true);
$grid->setTime(round(getElapsedTime($this->queryTimeStart), 5));

View File

@@ -76,11 +76,8 @@ final class UserGrid extends GridBase
$grid->setDataActions($this->getViewAction());
$grid->setDataActions($this->getEditAction());
$grid->setDataActions($this->getEditPassAction());
$deleteAction = $this->getDeleteAction();
$grid->setDataActions($deleteAction);
$grid->setDataActions($deleteAction, true);
$grid->setDataActions($this->getDeleteAction());
$grid->setDataActions($this->getDeleteAction()->setTitle(__('Eliminar Seleccionados')), true);
$grid->setTime(round(getElapsedTime($this->queryTimeStart), 5));

View File

@@ -67,11 +67,8 @@ final class UserGroupGrid extends GridBase
$grid->setDataActions($this->getCreateAction());
$grid->setDataActions($this->getViewAction());
$grid->setDataActions($this->getEditAction());
$deleteAction = $this->getDeleteAction();
$grid->setDataActions($deleteAction);
$grid->setDataActions($deleteAction, true);
$grid->setDataActions($this->getDeleteAction());
$grid->setDataActions($this->getDeleteAction()->setTitle(__('Eliminar Seleccionados')), true);
$grid->setTime(round(getElapsedTime($this->queryTimeStart), 5));

View File

@@ -67,11 +67,8 @@ final class UserProfileGrid extends GridBase
$grid->setDataActions($this->getCreateAction());
$grid->setDataActions($this->getViewAction());
$grid->setDataActions($this->getEditAction());
$deleteAction = $this->getDeleteAction();
$grid->setDataActions($deleteAction);
$grid->setDataActions($deleteAction, true);
$grid->setDataActions($this->getDeleteAction());
$grid->setDataActions($this->getDeleteAction()->setTitle(__('Eliminar Seleccionados')), true);
$grid->setTime(round(getElapsedTime($this->queryTimeStart), 5));

View File

@@ -0,0 +1,93 @@
<?php
/**
* sysPass
*
* @author nuxsmin
* @link https://syspass.org
* @copyright 2012-2018, Rubén Domínguez nuxsmin@$syspass.org
*
* This file is part of sysPass.
*
* sysPass 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 3 of the License, or
* (at your option) any later version.
*
* sysPass 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 sysPass. If not, see <http://www.gnu.org/licenses/>.
*/
namespace SP\Modules\Web\Controllers\Helpers;
use SP\DataModel\AccountPermission;
use SP\DataModel\ItemPresetData;
use SP\Mvc\View\Components\SelectItemAdapter;
use SP\Services\User\UserService;
use SP\Services\UserGroup\UserGroupService;
/**
* Class ItemPresetHelper
*
* @package SP\Modules\Web\Controllers\Helpers
*/
class ItemPresetHelper extends HelperBase
{
/**
* @var SelectItemAdapter
*/
private $users;
/**
* @var SelectItemAdapter
*/
private $userGroups;
/**
* @var SelectItemAdapter
*/
private $userProfiles;
/**
* @param ItemPresetData $itemPresetData
*
* @throws \SP\Core\Exceptions\NoSuchPropertyException
*/
public function makeAccountPermissionView(ItemPresetData $itemPresetData)
{
$accountPermission = $itemPresetData->hydrate(AccountPermission::class, 'data') ?: new AccountPermission();
$this->view->assign('typeTemplate', 'item_preset-permission');
$this->view->assign('permission', $accountPermission);
$this->view->assign('users', $this->users->getItemsFromModelSelected([$itemPresetData->getUserId()]));
$this->view->assign('usersView', $this->users->getItemsFromModelSelected($accountPermission->getUsersView()));
$this->view->assign('usersEdit', $this->users->getItemsFromModelSelected($accountPermission->getUsersEdit()));
$this->view->assign('userGroups', $this->userGroups->getItemsFromModelSelected([$itemPresetData->getUserGroupId()]));
$this->view->assign('userGroupsView', $this->userGroups->getItemsFromModelSelected($accountPermission->getUserGroupsView()));
$this->view->assign('userGroupsEdit', $this->userGroups->getItemsFromModelSelected($accountPermission->getUserGroupsEdit()));
$this->view->assign('userProfiles', $this->userProfiles->getItemsFromModelSelected([$itemPresetData->getUserProfileId()]));
}
/**
* makeDefaultPresetView
*/
public function makeDefaultPresetView()
{
$this->view->assign('users', $this->users->getItemsFromModel());
$this->view->assign('userGroups', $this->userGroups->getItemsFromModel());
$this->view->assign('userProfiles', $this->userProfiles->getItemsFromModel());
}
protected function initialize()
{
$this->users = SelectItemAdapter::factory(UserService::getItemsBasic());
$this->userGroups = SelectItemAdapter::factory(UserGroupService::getItemsBasic());
$this->userProfiles = SelectItemAdapter::factory(UserGroupService::getItemsBasic());
}
}

View File

@@ -33,6 +33,7 @@ use SP\Modules\Web\Controllers\Helpers\Grid\CategoryGrid;
use SP\Modules\Web\Controllers\Helpers\Grid\ClientGrid;
use SP\Modules\Web\Controllers\Helpers\Grid\CustomFieldGrid;
use SP\Modules\Web\Controllers\Helpers\Grid\FileGrid;
use SP\Modules\Web\Controllers\Helpers\Grid\ItemPresetGrid;
use SP\Modules\Web\Controllers\Helpers\Grid\PluginGrid;
use SP\Modules\Web\Controllers\Helpers\Grid\TagGrid;
use SP\Modules\Web\Controllers\Helpers\TabsGridHelper;
@@ -42,6 +43,7 @@ use SP\Services\Account\AccountService;
use SP\Services\Category\CategoryService;
use SP\Services\Client\ClientService;
use SP\Services\CustomField\CustomFieldDefService;
use SP\Services\ItemPreset\ItemPresetService;
use SP\Services\Plugin\PluginService;
use SP\Services\Tag\TagService;
@@ -111,6 +113,10 @@ final class ItemManagerController extends ControllerBase
$this->tabsGridHelper->addTab($this->getAccountsHistoryList());
}
if ($this->checkAccess(Acl::ITEMPRESET)) {
$this->tabsGridHelper->addTab($this->getItemPresetList());
}
if ($this->checkAccess(Acl::PLUGIN)) {
$this->tabsGridHelper->addTab($this->getPluginsList());
}
@@ -220,6 +226,20 @@ final class ItemManagerController extends ControllerBase
->updatePager();
}
/**
* Returns API tokens data tab
*
* @return \SP\Html\DataGrid\DataGridTab
* @throws \SP\Core\Exceptions\ConstraintException
* @throws \SP\Core\Exceptions\QueryException
*/
protected function getItemPresetList()
{
return $this->dic->get(ItemPresetGrid::class)
->getGrid($this->dic->get(ItemPresetService::class)->search($this->itemSearchData))
->updatePager();
}
/**
* Returns plugins' data tab
*

View File

@@ -28,32 +28,31 @@ use SP\Core\Acl\Acl;
use SP\Core\Events\Event;
use SP\Core\Events\EventMessage;
use SP\Core\Exceptions\ValidationException;
use SP\DataModel\AccountDefaultPermissionData;
use SP\DataModel\AccountPermission;
use SP\DataModel\ItemPresetData;
use SP\Http\JsonResponse;
use SP\Modules\Web\Controllers\Helpers\Grid\AccountDefaultPermissionGrid;
use SP\Modules\Web\Controllers\Helpers\Grid\ItemPresetGrid;
use SP\Modules\Web\Controllers\Helpers\ItemPresetHelper;
use SP\Modules\Web\Controllers\Traits\ItemTrait;
use SP\Modules\Web\Controllers\Traits\JsonTrait;
use SP\Modules\Web\Forms\AccountDefaultPermissionForm;
use SP\Modules\Web\Forms\ItemsPresetForm;
use SP\Mvc\Controller\CrudControllerInterface;
use SP\Mvc\View\Components\SelectItemAdapter;
use SP\Services\Account\AccountDefaultPermissionService;
use SP\Services\User\UserService;
use SP\Services\UserGroup\UserGroupService;
use SP\Services\ItemPreset\ItemPresetInterface;
use SP\Services\ItemPreset\ItemPresetService;
use SP\Util\Filter;
/**
* Class AccountDefaultPermissionController
*
* @package SP\Modules\Web\Controllers
*/
class AccountDefaultPermissionController extends ControllerBase implements CrudControllerInterface
class ItemPresetController extends ControllerBase implements CrudControllerInterface
{
use JsonTrait, ItemTrait;
/**
* @var AccountDefaultPermissionService
* @var ItemPresetService
*/
protected $accountDefaultPermissionService;
protected $itemPresetService;
/**
* View action
@@ -64,17 +63,17 @@ class AccountDefaultPermissionController extends ControllerBase implements CrudC
*/
public function viewAction($id)
{
if (!$this->acl->checkUserAccess(Acl::ACCOUNT_DEFAULT_PERMISSION_VIEW)) {
if (!$this->acl->checkUserAccess(Acl::ITEMPRESET_VIEW)) {
return $this->returnJsonResponse(JsonResponse::JSON_ERROR, __u('No tiene permisos para realizar esta operación'));
}
$this->view->assign('header', __('Ver Permiso'));
$this->view->assign('header', __('Ver Valor'));
$this->view->assign('isView', true);
try {
$this->setViewData($id);
$this->eventDispatcher->notifyEvent('show.accountDefaultPermission', new Event($this));
$this->eventDispatcher->notifyEvent('show.itemPreset', new Event($this));
return $this->returnJsonResponseData(['html' => $this->render()]);
} catch (\Exception $e) {
@@ -87,36 +86,35 @@ class AccountDefaultPermissionController extends ControllerBase implements CrudC
/**
* Sets view data for displaying permissions' data
*
* @param $permissionId
* @param int $id
* @param string $type
*
* @throws \SP\Core\Exceptions\ConstraintException
* @throws \SP\Core\Exceptions\NoSuchPropertyException
* @throws \SP\Core\Exceptions\QueryException
* @throws \SP\Repositories\NoSuchItemException
*/
protected function setViewData($permissionId = null)
protected function setViewData(int $id = null, string $type = null)
{
$this->view->addTemplate('account_default_permission', 'itemshow');
$this->view->addTemplate('item_preset', 'itemshow');
$accountDefaultPermissionData = $permissionId ? $this->accountDefaultPermissionService->getById($permissionId) : new AccountDefaultPermissionData();
$accountPermission = $accountDefaultPermissionData->getAccountPermission() ?: new AccountPermission();
$itemPresetData = $id ? $this->itemPresetService->getById($id) : new ItemPresetData();
$this->view->assign('permission', $accountDefaultPermissionData);
$itemPresetHelper = $this->dic->get(ItemPresetHelper::class);
$users = SelectItemAdapter::factory(UserService::getItemsBasic());
if ($itemPresetData->getType() === null) {
$itemPresetData->setType($type);
}
$this->view->assign('users', $users->getItemsFromModelSelected([$accountDefaultPermissionData->getUserId()]));
$this->view->assign('usersView', $users->getItemsFromModelSelected($accountPermission->getUsersView()));
$this->view->assign('usersEdit', $users->getItemsFromModelSelected($accountPermission->getUsersEdit()));
$userGroups = SelectItemAdapter::factory(UserGroupService::getItemsBasic());
$this->view->assign('userGroups', $userGroups->getItemsFromModelSelected([$accountDefaultPermissionData->getUserGroupId()]));
$this->view->assign('userGroupsView', $userGroups->getItemsFromModelSelected($accountPermission->getUserGroupsView()));
$this->view->assign('userGroupsEdit', $userGroups->getItemsFromModelSelected($accountPermission->getUserGroupsEdit()));
$this->view->assign('userProfiles', SelectItemAdapter::factory(UserGroupService::getItemsBasic())
->getItemsFromModelSelected([$accountDefaultPermissionData->getUserProfileId()]));
switch ($itemPresetData->getType()) {
case ItemPresetInterface::ITEM_TYPE_PERMISSION:
$itemPresetHelper->makeAccountPermissionView($itemPresetData);
break;
default:
$itemPresetHelper->makeDefaultPresetView();
}
$this->view->assign('preset', $itemPresetData);
$this->view->assign('sk', $this->session->generateSecurityKey());
$this->view->assign('nextAction', Acl::getActionRoute(Acl::ACCESS_MANAGE));
@@ -138,7 +136,7 @@ class AccountDefaultPermissionController extends ControllerBase implements CrudC
*/
public function searchAction()
{
if (!$this->acl->checkUserAccess(Acl::ACCOUNT_DEFAULT_PERMISSION_SEARCH)) {
if (!$this->acl->checkUserAccess(Acl::ITEMPRESET_SEARCH)) {
return $this->returnJsonResponse(JsonResponse::JSON_ERROR, __u('No tiene permisos para realizar esta operación'));
}
@@ -160,10 +158,10 @@ class AccountDefaultPermissionController extends ControllerBase implements CrudC
{
$itemSearchData = $this->getSearchData($this->configData->getAccountCount(), $this->request);
$grid = $this->dic->get(AccountDefaultPermissionGrid::class);
$grid = $this->dic->get(ItemPresetGrid::class);
return $grid->updatePager(
$grid->getGrid($this->accountDefaultPermissionService->search($itemSearchData)),
$grid->getGrid($this->itemPresetService->search($itemSearchData)),
$itemSearchData
);
}
@@ -173,19 +171,26 @@ class AccountDefaultPermissionController extends ControllerBase implements CrudC
*/
public function createAction()
{
if (!$this->acl->checkUserAccess(Acl::ACCOUNT_DEFAULT_PERMISSION_CREATE)) {
if (!$this->acl->checkUserAccess(Acl::ITEMPRESET_CREATE)) {
return $this->returnJsonResponse(JsonResponse::JSON_ERROR, __u('No tiene permisos para realizar esta operación'));
}
$args = func_get_args();
$type = null;
if (count($args) > 0) {
$type = Filter::getString($args[0]);
}
$this->view->assign(__FUNCTION__, 1);
$this->view->assign('header', __('Nuevo Permiso'));
$this->view->assign('header', __('Nuevo Valor'));
$this->view->assign('isView', false);
$this->view->assign('route', 'accountDefaultPermission/saveCreate');
$this->view->assign('route', 'itemPreset/saveCreate');
try {
$this->setViewData();
$this->setViewData(null, $type);
$this->eventDispatcher->notifyEvent('show.accountDefaultPermission.create', new Event($this));
$this->eventDispatcher->notifyEvent('show.itemPreset.create', new Event($this));
return $this->returnJsonResponseData(['html' => $this->render()]);
} catch (\Exception $e) {
@@ -204,18 +209,18 @@ class AccountDefaultPermissionController extends ControllerBase implements CrudC
*/
public function editAction($id)
{
if (!$this->acl->checkUserAccess(Acl::ACCOUNT_DEFAULT_PERMISSION_EDIT)) {
if (!$this->acl->checkUserAccess(Acl::ITEMPRESET_EDIT)) {
return $this->returnJsonResponse(JsonResponse::JSON_ERROR, __u('No tiene permisos para realizar esta operación'));
}
$this->view->assign('header', __('Editar Permiso'));
$this->view->assign('header', __('Editar Valor'));
$this->view->assign('isView', false);
$this->view->assign('route', 'accountDefaultPermission/saveEdit/' . $id);
$this->view->assign('route', 'itemPreset/saveEdit/' . $id);
try {
$this->setViewData($id);
$this->eventDispatcher->notifyEvent('show.accountDefaultPermission.edit', new Event($this));
$this->eventDispatcher->notifyEvent('show.itemPreset.edit', new Event($this));
return $this->returnJsonResponseData(['html' => $this->render()]);
} catch (\Exception $e) {
@@ -234,33 +239,33 @@ class AccountDefaultPermissionController extends ControllerBase implements CrudC
*/
public function deleteAction($id = null)
{
if (!$this->acl->checkUserAccess(Acl::ACCOUNT_DEFAULT_PERMISSION_DELETE)) {
if (!$this->acl->checkUserAccess(Acl::ITEMPRESET_DELETE)) {
return $this->returnJsonResponse(JsonResponse::JSON_ERROR, __u('No tiene permisos para realizar esta operación'));
}
try {
if ($id === null) {
$this->accountDefaultPermissionService->deleteByIdBatch($this->getItemsIdFromRequest($this->request));
$this->itemPresetService->deleteByIdBatch($this->getItemsIdFromRequest($this->request));
$this->eventDispatcher->notifyEvent('delete.accountDefaultPermission',
$this->eventDispatcher->notifyEvent('delete.itemPreset',
new Event($this,
EventMessage::factory()
->addDescription(__u('Permisos eliminados')))
->addDescription(__u('Valores eliminados')))
);
return $this->returnJsonResponse(JsonResponse::JSON_SUCCESS, __u('Permisos eliminados'));
return $this->returnJsonResponse(JsonResponse::JSON_SUCCESS, __u('Valores eliminados'));
}
$this->accountDefaultPermissionService->delete($id);
$this->itemPresetService->delete($id);
$this->eventDispatcher->notifyEvent('delete.accountDefaultPermission',
$this->eventDispatcher->notifyEvent('delete.itemPreset',
new Event($this,
EventMessage::factory()
->addDescription(__u('Permiso eliminado'))
->addDescription(__u('Valor eliminado'))
->addDetail(__u('ID'), $id))
);
return $this->returnJsonResponse(JsonResponse::JSON_SUCCESS, __u('Permiso eliminado'));
return $this->returnJsonResponse(JsonResponse::JSON_SUCCESS, __u('Valor eliminado'));
} catch (\Exception $e) {
processException($e);
@@ -273,24 +278,27 @@ class AccountDefaultPermissionController extends ControllerBase implements CrudC
*/
public function saveCreateAction()
{
if (!$this->acl->checkUserAccess(Acl::ACCOUNT_DEFAULT_PERMISSION_CREATE)) {
if (!$this->acl->checkUserAccess(Acl::ITEMPRESET_CREATE)) {
return $this->returnJsonResponse(JsonResponse::JSON_ERROR, __u('No tiene permisos para realizar esta operación'));
}
try {
$form = new AccountDefaultPermissionForm($this->dic);
$form->validate(Acl::ACCOUNT_DEFAULT_PERMISSION_CREATE);
$form = new ItemsPresetForm($this->dic);
$form->validate(Acl::ITEMPRESET_CREATE);
$id = $this->accountDefaultPermissionService->create($form->getItemData());
$itemData = $form->getItemData();
$this->eventDispatcher->notifyEvent('create.accountDefaultPermission',
$id = $this->itemPresetService->create($itemData);
$this->eventDispatcher->notifyEvent('create.itemPreset',
new Event($this,
EventMessage::factory()
->addDescription(__u('Permiso creado'))
->addDescription(__u('Valor creado'))
->addDetail(__u('Tipo'), $itemData->getItemPresetData()->getType())
->addDetail(__u('ID'), $id))
);
return $this->returnJsonResponse(JsonResponse::JSON_SUCCESS, __u('Permiso creado'));
return $this->returnJsonResponse(JsonResponse::JSON_SUCCESS, __u('Valor creado'));
} catch (ValidationException $e) {
return $this->returnJsonResponseException($e);
} catch (\Exception $e) {
@@ -309,24 +317,27 @@ class AccountDefaultPermissionController extends ControllerBase implements CrudC
*/
public function saveEditAction($id)
{
if (!$this->acl->checkUserAccess(Acl::ACCOUNT_DEFAULT_PERMISSION_EDIT)) {
if (!$this->acl->checkUserAccess(Acl::ITEMPRESET_EDIT)) {
return $this->returnJsonResponse(JsonResponse::JSON_ERROR, __u('No tiene permisos para realizar esta operación'));
}
try {
$form = new AccountDefaultPermissionForm($this->dic, $id);
$form->validate(Acl::ACCOUNT_DEFAULT_PERMISSION_EDIT);
$form = new ItemsPresetForm($this->dic, $id);
$form->validate(Acl::ITEMPRESET_EDIT);
$this->accountDefaultPermissionService->update($form->getItemData());
$itemData = $form->getItemData();
$this->eventDispatcher->notifyEvent('edit.accountDefaultPermission',
$this->itemPresetService->update($itemData);
$this->eventDispatcher->notifyEvent('edit.itemPreset',
new Event($this,
EventMessage::factory()
->addDescription(__u('Permiso actualizado'))
->addDescription(__u('Valor actualizado'))
->addDetail(__u('Tipo'), $itemData->getItemPresetData()->getType())
->addDetail(__u('ID'), $id))
);
return $this->returnJsonResponse(JsonResponse::JSON_SUCCESS, __u('Permiso actualizado'));
return $this->returnJsonResponse(JsonResponse::JSON_SUCCESS, __u('Valor actualizado'));
} catch (ValidationException $e) {
return $this->returnJsonResponseException($e);
} catch (\Exception $e) {
@@ -347,6 +358,6 @@ class AccountDefaultPermissionController extends ControllerBase implements CrudC
{
$this->checkLoggedIn();
$this->accountDefaultPermissionService = $this->dic->get(AccountDefaultPermissionService::class);
$this->itemPresetService = $this->dic->get(ItemPresetService::class);
}
}

View File

@@ -26,34 +26,36 @@ namespace SP\Modules\Web\Forms;
use SP\Core\Acl\ActionsInterface;
use SP\Core\Exceptions\ValidationException;
use SP\DataModel\AccountDefaultPermissionData;
use SP\DataModel\AccountPermission;
use SP\DataModel\ItemPresetData;
use SP\Services\ItemPreset\ItemPresetInterface;
use SP\Services\ItemPreset\ItemPresetRequest;
/**
* Class AccountDefaultPermissionForm
* Class ItemsPresetForm
*
* @package SP\Modules\Web\Forms
*/
final class AccountDefaultPermissionForm extends FormBase implements FormInterface
final class ItemsPresetForm extends FormBase implements FormInterface
{
/**
* @var AccountDefaultPermissionData
* @var ItemPresetRequest
*/
protected $accountDefaultPermissionData;
protected $itemPresetRequest;
/**
* Validar el formulario
*
* @param $action
*
* @return AccountDefaultPermissionForm
* @return ItemsPresetForm
* @throws ValidationException
*/
public function validate($action)
{
switch ($action) {
case ActionsInterface::ACCOUNT_DEFAULT_PERMISSION_CREATE:
case ActionsInterface::ACCOUNT_DEFAULT_PERMISSION_EDIT:
case ActionsInterface::ITEMPRESET_CREATE:
case ActionsInterface::ITEMPRESET_EDIT:
$this->analyzeRequestData();
$this->checkCommon();
break;
@@ -66,37 +68,58 @@ final class AccountDefaultPermissionForm extends FormBase implements FormInterfa
* Analizar los datos de la petición HTTP
*
* @return void
* @throws ValidationException
*/
protected function analyzeRequestData()
{
$this->accountDefaultPermissionData = new AccountDefaultPermissionData();
$itemPresetData = new ItemPresetData();
if ($this->itemId > 0) {
$this->accountDefaultPermissionData->setId($this->itemId);
$itemPresetData->setId($this->itemId);
}
if ($userId = $this->request->analyzeInt('user_id')) {
$this->accountDefaultPermissionData->setUserId($userId);
$itemPresetData->setUserId($userId);
}
if ($userGroupId = $this->request->analyzeInt('user_group_id')) {
$this->accountDefaultPermissionData->setUserGroupId($userGroupId);
$itemPresetData->setUserGroupId($userGroupId);
}
if ($userProfileId = $this->request->analyzeInt('user_profile_id')) {
$this->accountDefaultPermissionData->setUserProfileId($userProfileId);
$itemPresetData->setUserProfileId($userProfileId);
}
$this->accountDefaultPermissionData->setFixed((int)$this->request->analyzeBool('fixed_enabled', false));
$this->accountDefaultPermissionData->setPriority($this->request->analyzeInt('priority'));
$itemPresetData->setFixed((int)$this->request->analyzeBool('fixed_enabled', false));
$itemPresetData->setPriority($this->request->analyzeInt('priority'));
$itemPresetData->setType($this->request->analyzeString('type'));
switch ($itemPresetData->getType()) {
case ItemPresetInterface::ITEM_TYPE_PERMISSION:
$this->itemPresetRequest = new ItemPresetRequest($itemPresetData, $this->makePermissionPreset());
break;
default:
throw new ValidationException(__u('Tipo de valor no definido o incorrecto'));
}
}
/**
* @return AccountPermission
* @throws ValidationException
*/
private function makePermissionPreset()
{
$accountPermission = new AccountPermission();
$accountPermission->setUsersView($this->request->analyzeArray('users_view', null, []));
$accountPermission->setUsersEdit($this->request->analyzeArray('users_edit', null, []));
$accountPermission->setUserGroupsView($this->request->analyzeArray('user_groups_view', null, []));
$accountPermission->setUserGroupsEdit($this->request->analyzeArray('user_groups_edit', null, []));
$this->accountDefaultPermissionData->setAccountPermission($accountPermission);
if (!$accountPermission->hasItems()) {
throw new ValidationException(__u('No hay permisos definidos'));
}
return $accountPermission;
}
/**
@@ -104,23 +127,21 @@ final class AccountDefaultPermissionForm extends FormBase implements FormInterfa
*/
protected function checkCommon()
{
if (!$this->accountDefaultPermissionData->getUserId()
&& !$this->accountDefaultPermissionData->getUserGroupId()
&& !$this->accountDefaultPermissionData->getUserProfileId()
$itemPresetData = $this->itemPresetRequest->getItemPresetData();
if (!$itemPresetData->getUserId()
&& !$itemPresetData->getUserGroupId()
&& !$itemPresetData->getUserProfileId()
) {
throw new ValidationException(__u('Es necesario asignar un elemento del tipo usuario, grupo o perfil'));
}
if (!$this->accountDefaultPermissionData->getAccountPermission()->hasItems()) {
throw new ValidationException(__u('No hay permisos definidos'));
}
}
/**
* @return AccountDefaultPermissionData
* @return ItemPresetRequest
*/
public function getItemData()
{
return $this->accountDefaultPermissionData;
return $this->itemPresetRequest;
}
}

View File

@@ -97,7 +97,7 @@ final class UserProfileForm extends FormBase implements FormInterface
$profileData->setMgmPublicLinks($this->request->analyzeBool('profile_publinks', false));
$profileData->setMgmAccounts($this->request->analyzeBool('profile_accounts', false));
$profileData->setMgmFiles($this->request->analyzeBool('profile_files', false));
$profileData->setMgmAccountDefaultPermissions($this->request->analyzeBool('profile_permissions', false));
$profileData->setMgmItemsPreset($this->request->analyzeBool('profile_items_preset', false));
$profileData->setMgmTags($this->request->analyzeBool('profile_tags', false));
$profileData->setEvl($this->request->analyzeBool('profile_eventlog', false));

View File

@@ -94,7 +94,7 @@ if (!isset($index)): $index = 0; endif;
data-onclick="<?php echo $action->getOnClick(); ?>"
<?php foreach ($action->getData() as $dataName => $dataValue): echo 'data-', $dataName, '=', '"', $dataValue, '"'; endforeach; ?>>
<i class="material-icons <?php echo $action->getIcon()->getClass(); ?>"><?php echo $action->getIcon()->getIcon(); ?></i>
<?php echo __('Eliminar Seleccionados'); ?>
<?php echo $action->getTitle(); ?>
</li>
<?php endforeach; ?>
</ul>

View File

@@ -1,7 +1,7 @@
<?php
/**
* @var $data SP\Html\DataGrid\DataGridTab
* @var $this SP\Core\Template
* @var $this \SP\Mvc\View\Template
* @var $action SP\Html\DataGrid\DataGridAction|SP\Html\DataGrid\DataGridActionSearch
*/
?>

View File

@@ -0,0 +1,81 @@
<table class="popup-data">
<tbody>
<tr>
<td class="descField"><?php echo __('Usuarios'); ?></td>
<td class="valField">
<div class="account-permissions">
<div class="tag-list-box">
<div class="tag-list-header"><?php echo __('Ver'); ?></div>
<select id="users_view" name="users_view[]" multiple="multiple"
class="select-box">
<option value=""><?php echo __('Seleccionar Usuarios'); ?></option>
<?php /** @var \SP\Mvc\View\Components\SelectItem[] $usersView */
foreach ($usersView as $user): ?>
<?php if ($user->isSkip()): continue; endif; ?>
<option
value="<?php echo $user->getId(); ?>"
<?php echo $user->isSelected() ? 'selected' : '' ?>><?php echo $user->getName(); ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="tag-list-box">
<div class="tag-list-header"><?php echo __('Editar'); ?></div>
<select id="users_edit" name="users_edit[]" multiple="multiple"
class="select-box">
<option value=""><?php echo __('Seleccionar Usuarios'); ?></option>
<?php /** @var \SP\Mvc\View\Components\SelectItem[] $usersEdit */
foreach ($usersEdit as $user): ?>
<?php if ($user->isSkip()): continue; endif; ?>
<option
value="<?php echo $user->getId(); ?>"
<?php echo $user->isSelected() ? 'selected' : '' ?>><?php echo $user->getName(); ?></option>
<?php endforeach; ?>
</select>
</div>
</div>
</td>
</tr>
<tr>
<td class="descField"><?php echo __('Grupos'); ?></td>
<td class="valField">
<div class="account-permissions">
<div class="tag-list-box">
<div class="tag-list-header"><?php echo __('Ver'); ?></div>
<select id="user_groups_view" name="user_groups_view[]" multiple="multiple"
class="select-box">
<option value=""><?php echo __('Seleccionar Grupos'); ?></option>
<?php /** @var \SP\Mvc\View\Components\SelectItem[] $userGroupsView */
foreach ($userGroupsView as $userGroup): ?>
<?php if ($userGroup->isSkip()): continue; endif; ?>
<option
value="<?php echo $userGroup->getId(); ?>"
<?php echo $userGroup->isSelected() ? 'selected' : '' ?>><?php echo $userGroup->getName(); ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="tag-list-box">
<div class="tag-list-header"><?php echo __('Editar'); ?></div>
<select id="user_groups_edit" name="user_groups_edit[]" multiple="multiple"
class="select-box">
<option value=""><?php echo __('Seleccionar Grupos'); ?></option>
<?php /** @var \SP\Mvc\View\Components\SelectItem[] $userGroupsEdit */
foreach ($userGroupsEdit as $userGroup): ?>
<?php if ($userGroup->isSkip()): continue; endif; ?>
<option
value="<?php echo $userGroup->getId(); ?>"
<?php echo $userGroup->isSelected() ? 'selected' : '' ?>><?php echo $userGroup->getName(); ?></option>
<?php endforeach; ?>
</select>
</div>
</div>
</td>
</tr>
</tbody>
</table>

View File

@@ -1,12 +1,13 @@
<?php
/** @var $icons \SP\Core\UI\ThemeIcons */
/** @var $permission \SP\DataModel\AccountDefaultPermissionData */
/** @var $preset \SP\DataModel\ItemPresetData */
/** @var $this \SP\Mvc\View\Template */
?>
<div id="box-popup">
<h2 class="center"><?php echo $header; ?><i class="btn-popup-close material-icons">close</i></h2>
<form method="post" name="frmAccountDefaultGroup" id="frmAccountDefaultGroup" class="form-action"
<form method="post" name="frmItemPreset" id="frmItemPreset" class="form-action"
data-onsubmit="appMgmt/save"
data-action-route="<?php echo isset($route) ? $route : ''; ?>"
data-activetab="<?php echo isset($activeTab) ? $activeTab : ''; ?>"
@@ -72,7 +73,7 @@
class="icon material-icons <?php echo $icons->getIconHelp()->getClass(); ?>"><?php echo $icons->getIconHelp()->getIcon(); ?></div>
<div class="mdl-tooltip mdl-tooltip--large" for="help-priority">
<p>
<?php echo __('Prioridad de asignación en caso de coincidir con otros permisos asignados por usuario, grupo o perfil.'); ?>
<?php echo __('Prioridad de asignación en caso de coincidir con otros valores asignados por usuario, grupo o perfil.'); ?>
</p>
</div>
</td>
@@ -81,7 +82,7 @@
<input id="priority" name="priority" type="number" step="1"
pattern="[0-9]{1,3}" class="mdl-textfield__input mdl-color-text--indigo-400"
maxlength="3" min="0" max="128"
value="<?php echo $permission->getPriority(); ?>"/>
value="<?php echo $preset->getPriority(); ?>"/>
<label class="mdl-textfield__label"
for="priority"><?php echo __('Prioridad de asignación'); ?></label>
</div>
@@ -97,16 +98,16 @@
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect" for="fixed_enabled">
<input type="checkbox" id="fixed_enabled"
class="mdl-switch__input"
name="fixed_enabled" <?php echo $permission->getFixed() ? 'checked' : ''; ?>/>
name="fixed_enabled" <?php echo $preset->getFixed() ? 'checked' : ''; ?>/>
</label>
</div>
<span class="mdl-list__item-primary-content">
<span><?php echo __('Forzado'); ?></span>
<span class="mdl-list__item-sub-title">
<?php echo __('Indica si los permisos serán forzados al crear o modificar la cuenta.'); ?>
<?php echo __('Indica si los valores serán forzados al crear o modificar los elementos.'); ?>
<br>
<?php echo __('Los permisos serán añadidos a los existentes.'); ?>
<?php echo __('Los valores serán añadidos a los existentes.'); ?>
</span>
</span>
</li>
@@ -114,94 +115,19 @@
</td>
</tr>
<tr>
<td class="descField"><?php echo __('Usuarios'); ?></td>
<td class="valField">
<div class="account-permissions">
<div class="tag-list-box">
<div class="tag-list-header"><?php echo __('Ver'); ?></div>
<select id="users_view" name="users_view[]" multiple="multiple"
class="select-box">
<option value=""><?php echo __('Seleccionar Usuarios'); ?></option>
<?php /** @var \SP\Mvc\View\Components\SelectItem[] $usersView */
foreach ($usersView as $user): ?>
<?php if ($user->isSkip()): continue; endif; ?>
<option
value="<?php echo $user->getId(); ?>"
<?php echo $user->isSelected() ? 'selected' : '' ?>><?php echo $user->getName(); ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="tag-list-box">
<div class="tag-list-header"><?php echo __('Editar'); ?></div>
<select id="users_edit" name="users_edit[]" multiple="multiple"
class="select-box">
<option value=""><?php echo __('Seleccionar Usuarios'); ?></option>
<?php /** @var \SP\Mvc\View\Components\SelectItem[] $usersEdit */
foreach ($usersEdit as $user): ?>
<?php if ($user->isSkip()): continue; endif; ?>
<option
value="<?php echo $user->getId(); ?>"
<?php echo $user->isSelected() ? 'selected' : '' ?>><?php echo $user->getName(); ?></option>
<?php endforeach; ?>
</select>
</div>
</div>
</td>
</tr>
<tr>
<td class="descField"><?php echo __('Grupos'); ?></td>
<td class="valField">
<div class="account-permissions">
<div class="tag-list-box">
<div class="tag-list-header"><?php echo __('Ver'); ?></div>
<select id="user_groups_view" name="user_groups_view[]" multiple="multiple"
class="select-box">
<option value=""><?php echo __('Seleccionar Grupos'); ?></option>
<?php /** @var \SP\Mvc\View\Components\SelectItem[] $userGroupsView */
foreach ($userGroupsView as $userGroup): ?>
<?php if ($userGroup->isSkip()): continue; endif; ?>
<option
value="<?php echo $userGroup->getId(); ?>"
<?php echo $userGroup->isSelected() ? 'selected' : '' ?>><?php echo $userGroup->getName(); ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="tag-list-box">
<div class="tag-list-header"><?php echo __('Editar'); ?></div>
<select id="user_groups_edit" name="user_groups_edit[]" multiple="multiple"
class="select-box">
<option value=""><?php echo __('Seleccionar Grupos'); ?></option>
<?php /** @var \SP\Mvc\View\Components\SelectItem[] $userGroupsEdit */
foreach ($userGroupsEdit as $userGroup): ?>
<?php if ($userGroup->isSkip()): continue; endif; ?>
<option
value="<?php echo $userGroup->getId(); ?>"
<?php echo $userGroup->isSelected() ? 'selected' : '' ?>><?php echo $userGroup->getName(); ?></option>
<?php endforeach; ?>
</select>
</div>
</div>
</td>
</tr>
<?php if (isset($typeTemplate)) : include $this->includeTemplate($typeTemplate, 'itemshow'); endif; ?>
</tbody>
</table>
<input type="hidden" name="type" value="<?php echo $preset->getType(); ?>">
<input type="hidden" name="sk" value="">
<input type="hidden" name="isAjax" value="1">
</form>
<div class="action-in-box">
<button
class="mdl-button mdl-js-button mdl-button--fab mdl-button--mini-fab mdl-button--colored <?php echo $icons->getIconSave()->getClassButton(); ?>"
form="frmAccountDefaultGroup" title="<?php echo $icons->getIconSave()->getTitle(); ?>">
form="frmItemPreset" title="<?php echo $icons->getIconSave()->getTitle(); ?>">
<i class="material-icons"><?php echo $icons->getIconSave()->getIcon(); ?></i>
</button>
</div>

View File

@@ -419,14 +419,14 @@
<span class="mdl-list__item-primary-content">
<i class="material-icons mdl-list__item-icon">vpn_key</i>
<span><?php echo __('Permisos'); ?></span>
<span class="mdl-list__item-sub-title"><?php echo __('Gestión de Permisos'); ?></span>
<span class="mdl-list__item-sub-title"><?php echo __('Gestión de Valores por Defecto'); ?></span>
</span>
<span class="mdl-list__item-secondary-action">
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect" for="profile_permissions">
<input type="checkbox" id="profile_permissions"
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect" for="profile_items_preset">
<input type="checkbox" id="profile_items_preset"
class="mdl-switch__input"
name="profile_permissions" <?php echo $profileData->isMgmAccountDefaultPermissions() ? 'CHECKED' : ''; ?> <?php echo $disabled; ?>/>
name="profile_items_preset" <?php echo $profileData->isMgmItemsPreset() ? 'CHECKED' : ''; ?> <?php echo $disabled; ?>/>
</label>
</span>
</li>

View File

@@ -255,13 +255,13 @@ final class Acl implements ActionsInterface
case self::AUTHTOKEN_EDIT:
case self::AUTHTOKEN_DELETE:
return $userProfile->isMgmApiTokens();
case self::ACCOUNT_DEFAULT_PERMISSION:
case self::ACCOUNT_DEFAULT_PERMISSION_SEARCH:
case self::ACCOUNT_DEFAULT_PERMISSION_VIEW:
case self::ACCOUNT_DEFAULT_PERMISSION_CREATE:
case self::ACCOUNT_DEFAULT_PERMISSION_EDIT:
case self::ACCOUNT_DEFAULT_PERMISSION_DELETE:
return $userProfile->isMgmAccountDefaultPermissions();
case self::ITEMPRESET:
case self::ITEMPRESET_SEARCH:
case self::ITEMPRESET_VIEW:
case self::ITEMPRESET_CREATE:
case self::ITEMPRESET_EDIT:
case self::ITEMPRESET_DELETE:
return $userProfile->isMgmItemsPreset();
case self::EVENTLOG:
case self::EVENTLOG_SEARCH:
case self::EVENTLOG_CLEAR:

View File

@@ -169,12 +169,12 @@ interface ActionsInterface
const EVENTLOG = 1701;
const EVENTLOG_SEARCH = 1702;
const EVENTLOG_CLEAR = 1703;
const ACCOUNT_DEFAULT_PERMISSION = 1801;
const ACCOUNT_DEFAULT_PERMISSION_SEARCH = 1802;
const ACCOUNT_DEFAULT_PERMISSION_VIEW = 1803;
const ACCOUNT_DEFAULT_PERMISSION_CREATE = 1804;
const ACCOUNT_DEFAULT_PERMISSION_EDIT = 1805;
const ACCOUNT_DEFAULT_PERMISSION_DELETE = 1806;
const ITEMPRESET = 1801;
const ITEMPRESET_SEARCH = 1802;
const ITEMPRESET_VIEW = 1803;
const ITEMPRESET_CREATE = 1804;
const ITEMPRESET_EDIT = 1805;
const ITEMPRESET_DELETE = 1806;
const ITEMS_MANAGE = 5001;
const ACCESS_MANAGE = 5002;
const USERSETTINGS = 5010;

View File

@@ -0,0 +1,35 @@
<?php
/**
* sysPass
*
* @author nuxsmin
* @link https://syspass.org
* @copyright 2012-2018, Rubén Domínguez nuxsmin@$syspass.org
*
* This file is part of sysPass.
*
* sysPass 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 3 of the License, or
* (at your option) any later version.
*
* sysPass 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 sysPass. If not, see <http://www.gnu.org/licenses/>.
*/
namespace SP\Core\Exceptions;
/**
* Class NoSuchPropertyException
*
* @package SP\Core\Exceptions
*/
class NoSuchPropertyException extends \Exception
{
}

View File

@@ -0,0 +1,42 @@
<?php
/**
* sysPass
*
* @author nuxsmin
* @link https://syspass.org
* @copyright 2012-2018, Rubén Domínguez nuxsmin@$syspass.org
*
* This file is part of sysPass.
*
* sysPass 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 3 of the License, or
* (at your option) any later version.
*
* sysPass 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 sysPass. If not, see <http://www.gnu.org/licenses/>.
*/
namespace SP\DataModel;
/**
* Interface HydratableInterface
*
* @package SP\DataModel
*/
interface HydratableInterface
{
/**
* @param string $class
*
* @param string $property
*
* @return mixed|null
*/
public function hydrate(string $class = null, string $property = 'data');
}

View File

@@ -24,19 +24,24 @@
namespace SP\DataModel;
use SP\Core\Exceptions\NoSuchPropertyException;
use SP\Util\Util;
/**
* Class AccountDefaultPermission
* Class ItemPresetData
*
* @package SP\DataModel
*/
class AccountDefaultPermissionData extends DataModelBase
class ItemPresetData extends DataModelBase implements HydratableInterface
{
/**
* @var int
*/
public $id;
/**
* @var string
*/
public $type;
/**
* @var int
*/
@@ -60,11 +65,7 @@ class AccountDefaultPermissionData extends DataModelBase
/**
* @var string
*/
public $permission;
/**
* @var AccountPermission
*/
private $accountPermission;
public $data;
/**
* @return int
@@ -77,7 +78,7 @@ class AccountDefaultPermissionData extends DataModelBase
/**
* @param int $id
*
* @return AccountDefaultPermissionData
* @return ItemPresetData
*/
public function setId(int $id)
{
@@ -97,7 +98,7 @@ class AccountDefaultPermissionData extends DataModelBase
/**
* @param int $userId
*
* @return AccountDefaultPermissionData
* @return ItemPresetData
*/
public function setUserId(int $userId)
{
@@ -117,7 +118,7 @@ class AccountDefaultPermissionData extends DataModelBase
/**
* @param int $userGroupId
*
* @return AccountDefaultPermissionData
* @return ItemPresetData
*/
public function setUserGroupId(int $userGroupId)
{
@@ -137,7 +138,7 @@ class AccountDefaultPermissionData extends DataModelBase
/**
* @param int $userProfileId
*
* @return AccountDefaultPermissionData
* @return ItemPresetData
*/
public function setUserProfileId(int $userProfileId)
{
@@ -157,7 +158,7 @@ class AccountDefaultPermissionData extends DataModelBase
/**
* @param int $fixed
*
* @return AccountDefaultPermissionData
* @return ItemPresetData
*/
public function setFixed(int $fixed)
{
@@ -177,7 +178,7 @@ class AccountDefaultPermissionData extends DataModelBase
/**
* @param int $priority
*
* @return AccountDefaultPermissionData
* @return ItemPresetData
*/
public function setPriority(int $priority)
{
@@ -189,9 +190,17 @@ class AccountDefaultPermissionData extends DataModelBase
/**
* @return string
*/
public function getPermission()
public function getData()
{
return $this->permission;
return $this->data;
}
/**
* @param string $data
*/
public function setData(string $data)
{
$this->data = $data;
}
/**
@@ -199,39 +208,43 @@ class AccountDefaultPermissionData extends DataModelBase
*/
public function getHash()
{
return sha1((int)$this->userId . (int)$this->userGroupId . (int)$this->userProfileId . (int)$this->priority);
return sha1($this->type . (int)$this->userId . (int)$this->userGroupId . (int)$this->userProfileId . (int)$this->priority);
}
/**
* @return $this
* @param string $class
*
* @param string $property
*
* @return mixed
* @throws NoSuchPropertyException
*/
public function hydrate()
public function hydrate(string $class = null, string $property = 'data')
{
if ($this->permission !== null) {
$this->accountPermission = Util::unserialize(AccountPermission::class, $this->permission);
if (property_exists($this, $property)) {
if ($this->data !== null) {
return $class !== null ? Util::unserialize($class, $this->data) : unserialize($this->data);
}
return null;
}
return $this;
throw new NoSuchPropertyException($property);
}
/**
* @return AccountPermission
* @return string
*/
public function getAccountPermission()
public function getType()
{
return $this->accountPermission;
return $this->type;
}
/**
* @param AccountPermission $accountPermission
*
* @return AccountDefaultPermissionData
* @param string $type
*/
public function setAccountPermission(AccountPermission $accountPermission)
public function setType(string $type)
{
$this->accountPermission = $accountPermission;
$this->permission = serialize($accountPermission);
return $this;
$this->type = $type;
}
}

View File

@@ -144,7 +144,7 @@ class ProfileData
/**
* @var bool
*/
protected $mgmAccountDefaultPermissions = false;
protected $mgmItemsPreset = false;
/**
* @var bool
*/
@@ -769,19 +769,19 @@ class ProfileData
/**
* @return bool
*/
public function isMgmAccountDefaultPermissions(): bool
public function isMgmItemsPreset(): bool
{
return $this->mgmAccountDefaultPermissions;
return $this->mgmItemsPreset;
}
/**
* @param bool $mgmAccountDefaultPermissions
* @param bool $mgmItemsPreset
*
* @return ProfileData
*/
public function setMgmAccountDefaultPermissions(bool $mgmAccountDefaultPermissions)
public function setMgmItemsPreset(bool $mgmItemsPreset)
{
$this->mgmAccountDefaultPermissions = $mgmAccountDefaultPermissions;
$this->mgmItemsPreset = $mgmItemsPreset;
return $this;
}

View File

@@ -22,9 +22,9 @@
* along with sysPass. If not, see <http://www.gnu.org/licenses/>.
*/
namespace SP\Repositories\Account;
namespace SP\Repositories\ItemPreset;
use SP\DataModel\AccountDefaultPermissionData;
use SP\DataModel\ItemPresetData;
use SP\DataModel\ItemSearchData;
use SP\Repositories\Repository;
use SP\Repositories\RepositoryItemInterface;
@@ -37,14 +37,14 @@ use SP\Storage\Database\QueryResult;
*
* @package SP\Repositories\Account
*/
class AccountDefaultPermissionRepository extends Repository implements RepositoryItemInterface
class ItemPresetRepository extends Repository implements RepositoryItemInterface
{
use RepositoryItemTrait;
/**
* Creates an item
*
* @param AccountDefaultPermissionData $itemData
* @param ItemPresetData $itemData
*
* @return int
* @throws \SP\Core\Exceptions\ConstraintException
@@ -54,21 +54,23 @@ class AccountDefaultPermissionRepository extends Repository implements Repositor
{
$queryData = new QueryData();
$queryData->setQuery(
'INSERT INTO AccountDefaultPermission
SET userId = ?,
'INSERT INTO ItemPreset
SET type = ?,
userId = ?,
userGroupId = ?,
userProfileId = ?,
`fixed` = ?,
priority = ?,
permission = ?,
`data` = ?,
`hash` = ?');
$queryData->setParams([
$itemData->getType(),
$itemData->getUserId(),
$itemData->getUserGroupId(),
$itemData->getUserProfileId(),
$itemData->getFixed(),
$itemData->getPriority(),
$itemData->getPermission(),
$itemData->getData(),
$itemData->getHash()
]);
$queryData->setOnErrorMessage(__u('Error al crear permiso'));
@@ -79,7 +81,7 @@ class AccountDefaultPermissionRepository extends Repository implements Repositor
/**
* Updates an item
*
* @param AccountDefaultPermissionData $itemData
* @param ItemPresetData $itemData
*
* @return int
* @throws \SP\Core\Exceptions\ConstraintException
@@ -89,22 +91,24 @@ class AccountDefaultPermissionRepository extends Repository implements Repositor
{
$queryData = new QueryData();
$queryData->setQuery(
'UPDATE AccountDefaultPermission
SET userId = ?,
'UPDATE ItemPreset
SET type = ?,
userId = ?,
userGroupId = ?,
userProfileId = ?,
`fixed` = ?,
priority = ?,
permission = ?,
`data` = ?,
`hash` = ?
WHERE id = ? LIMIT 1');
$queryData->setParams([
$itemData->getType(),
$itemData->getUserId(),
$itemData->getUserGroupId(),
$itemData->getUserProfileId(),
$itemData->getFixed(),
$itemData->getPriority(),
$itemData->getPermission(),
$itemData->getData(),
$itemData->getHash(),
$itemData->getId()
]);
@@ -125,7 +129,7 @@ class AccountDefaultPermissionRepository extends Repository implements Repositor
public function delete($id)
{
$queryData = new QueryData();
$queryData->setQuery('DELETE FROM AccountDefaultPermission WHERE id = ? LIMIT 1');
$queryData->setQuery('DELETE FROM ItemPreset WHERE id = ? LIMIT 1');
$queryData->setParams([$id]);
$queryData->setOnErrorMessage(__u('Error al eliminar permiso'));
@@ -144,10 +148,10 @@ class AccountDefaultPermissionRepository extends Repository implements Repositor
public function getById($id)
{
$queryData = new QueryData();
$queryData->setMapClassName(AccountDefaultPermissionData::class);
$queryData->setMapClassName(ItemPresetData::class);
$queryData->setQuery(
'SELECT id, userId, userGroupId, userProfileId, `fixed`, priority, permission
FROM AccountDefaultPermission WHERE id = ? LIMIT 1');
'SELECT id, type, userId, userGroupId, userProfileId, `fixed`, priority, `data`
FROM ItemPreset WHERE id = ? LIMIT 1');
$queryData->setParams([$id]);
return $this->db->doSelect($queryData);
@@ -156,26 +160,27 @@ class AccountDefaultPermissionRepository extends Repository implements Repositor
/**
* Returns the item for given id
*
* @param int $userId
* @param int $userGroupId
* @param int $userProfileId
* @param string $type
* @param int $userId
* @param int $userGroupId
* @param int $userProfileId
*
* @return QueryResult
* @throws \SP\Core\Exceptions\ConstraintException
* @throws \SP\Core\Exceptions\QueryException
*/
public function getByFilter(int $userId, int $userGroupId, int $userProfileId)
public function getByFilter(string $type, int $userId, int $userGroupId, int $userProfileId)
{
$queryData = new QueryData();
$queryData->setMapClassName(AccountDefaultPermissionData::class);
$queryData->setMapClassName(ItemPresetData::class);
$queryData->setQuery(
'SELECT id, userId, userGroupId, userProfileId, `fixed`, priority, permission
FROM AccountDefaultPermission
WHERE userId = ? OR userGroupId = ? OR userProfileId = ?
'SELECT id, type, userId, userGroupId, userProfileId, `fixed`, priority, `data`
FROM ItemPreset
WHERE type = ? AND (userId = ? OR userGroupId = ? OR userProfileId = ?)
ORDER BY priority DESC, userId DESC, userProfileId DESC, userGroupId DESC
LIMIT 1');
$queryData->setParams([$userId, $userGroupId, $userProfileId]);
$queryData->setParams([$type, $userId, $userGroupId, $userProfileId]);
return $this->db->doSelect($queryData);
}
@@ -190,10 +195,10 @@ class AccountDefaultPermissionRepository extends Repository implements Repositor
public function getAll()
{
$queryData = new QueryData();
$queryData->setMapClassName(AccountDefaultPermissionData::class);
$queryData->setMapClassName(ItemPresetData::class);
$queryData->setQuery(
'SELECT id, userId, userGroupId, userProfileId, `fixed`, priority, permission
FROM AccountDefaultPermission');
'SELECT id, type, userId, userGroupId, userProfileId, `fixed`, priority, `data`
FROM ItemPreset');
return $this->db->doSelect($queryData);
}
@@ -214,10 +219,10 @@ class AccountDefaultPermissionRepository extends Repository implements Repositor
}
$queryData = new QueryData();
$queryData->setMapClassName(AccountDefaultPermissionData::class);
$queryData->setMapClassName(ItemPresetData::class);
$queryData->setQuery(
'SELECT userId, userGroupId, userProfileId, `fixed`, priority, permission
FROM AccountDefaultPermission WHERE id IN (' . $this->getParamsFromArray($ids) . ')');
'SELECT type, userId, userGroupId, userProfileId, `fixed`, priority, `data`
FROM ItemPreset WHERE id IN (' . $this->getParamsFromArray($ids) . ')');
$queryData->setParams($ids);
return $this->db->doSelect($queryData);
@@ -239,7 +244,7 @@ class AccountDefaultPermissionRepository extends Repository implements Repositor
}
$queryData = new QueryData();
$queryData->setQuery('DELETE FROM AccountDefaultPermission WHERE id IN (' . $this->getParamsFromArray($ids) . ')');
$queryData->setQuery('DELETE FROM ItemPreset WHERE id IN (' . $this->getParamsFromArray($ids) . ')');
$queryData->setParams($ids);
$queryData->setOnErrorMessage(__u('Error al eliminar los permisos'));
@@ -289,30 +294,32 @@ class AccountDefaultPermissionRepository extends Repository implements Repositor
{
$queryData = new QueryData();
$queryData->setSelect(
'ADP.id,
ADP.userId,
ADP.userGroupId,
ADP.userProfileId,
ADP.`fixed`,
ADP.priority,
ADP.permission,
'IP.id,
IP.type,
IP.userId,
IP.userGroupId,
IP.userProfileId,
IP.`fixed`,
IP.priority,
IP.data,
U.name AS userName,
UP.name AS userProfileName,
UG.name AS userGroupName');
$queryData->setFrom('
AccountDefaultPermission ADP
LEFT JOIN User U ON ADP.userId = U.id
LEFT JOIN UserProfile UP ON ADP.userProfileId = UP.id
LEFT JOIN UserGroup UG ON ADP.userGroupId = UG.id');
$queryData->setOrder('id');
ItemPreset IP
LEFT JOIN User U ON IP.userId = U.id
LEFT JOIN UserProfile UP ON IP.userProfileId = UP.id
LEFT JOIN UserGroup UG ON IP.userGroupId = UG.id');
$queryData->setOrder('IP.type, IP.priority DESC, IP.userId DESC, IP.userProfileId DESC, IP.userGroupId DESC');
if ($itemSearchData->getSeachString() !== '') {
$queryData->setWhere('U.name LIKE ? OR UP.name LIKE ? OR UG.name LIKE ?');
$queryData->setWhere('IP.type LIKE ? OR U.name LIKE ? OR UP.name LIKE ? OR UG.name LIKE ?');
$search = '%' . $itemSearchData->getSeachString() . '%';
$queryData->addParam($search);
$queryData->addParam($search);
$queryData->addParam($search);
$queryData->addParam($search);
}
$queryData->setLimit('?,?');
@@ -321,14 +328,4 @@ class AccountDefaultPermissionRepository extends Repository implements Repositor
return $this->db->doSelect($queryData, true);
}
/**
* @param AccountDefaultPermissionData $data
*
* @return string
*/
private function getHash(AccountDefaultPermissionData $data)
{
return sha1((int)$data->getUserId() . (int)$data->getUserGroupId() . (int)$data->getUserProfileId() . (int)$data->getPriority());
}
}

View File

@@ -31,6 +31,7 @@ use SP\Core\Exceptions\SPException;
use SP\DataModel\AccountData;
use SP\DataModel\AccountHistoryData;
use SP\DataModel\AccountPassData;
use SP\DataModel\AccountPermission;
use SP\DataModel\AccountSearchVData;
use SP\DataModel\Dto\AccountDetailsResponse;
use SP\DataModel\Dto\AccountHistoryCreateDto;
@@ -41,6 +42,8 @@ use SP\Repositories\Account\AccountToUserGroupRepository;
use SP\Repositories\Account\AccountToUserRepository;
use SP\Repositories\NoSuchItemException;
use SP\Services\Config\ConfigService;
use SP\Services\ItemPreset\ItemPresetInterface;
use SP\Services\ItemPreset\ItemPresetService;
use SP\Services\Service;
use SP\Services\ServiceException;
use SP\Services\ServiceItemTrait;
@@ -72,9 +75,9 @@ final class AccountService extends Service implements AccountServiceInterface
*/
protected $accountToTagRepository;
/**
* @var AccountDefaultPermissionService
* @var ItemPresetService
*/
protected $accountDefaultPermissionService;
protected $itemPresetService;
/**
* @param int $id
@@ -293,16 +296,17 @@ final class AccountService extends Service implements AccountServiceInterface
*
* @throws QueryException
* @throws \SP\Core\Exceptions\ConstraintException
* @throws \SP\Core\Exceptions\NoSuchPropertyException
*/
private function addDefaultPermissions(int $accountId)
{
$accountDefaultPermission = $this->accountDefaultPermissionService->getForCurrentUser();
$itemPresetData = $this->itemPresetService->getForCurrentUser(ItemPresetInterface::ITEM_TYPE_PERMISSION);
if ($accountDefaultPermission !== null
&& $accountDefaultPermission->getFixed()
if ($itemPresetData !== null
&& $itemPresetData->getFixed()
) {
$userData = $this->context->getUserData();
$accountPermission = $accountDefaultPermission->getAccountPermission();
$accountPermission = $itemPresetData->hydrate(AccountPermission::class);
$accountRequest = new AccountRequest();
$accountRequest->id = $accountId;
@@ -694,6 +698,6 @@ final class AccountService extends Service implements AccountServiceInterface
$this->accountToUserRepository = $this->dic->get(AccountToUserRepository::class);
$this->accountToUserGroupRepository = $this->dic->get(AccountToUserGroupRepository::class);
$this->accountToTagRepository = $this->dic->get(AccountToTagRepository::class);
$this->accountDefaultPermissionService = $this->dic->get(AccountDefaultPermissionService::class);
$this->itemPresetService = $this->dic->get(ItemPresetService::class);
}
}

View File

@@ -57,7 +57,7 @@ final class Installer extends Service
*/
const VERSION = [3, 0, 0];
const VERSION_TEXT = '3.0-beta';
const BUILD = 18083001;
const BUILD = 18083002;
/**
* @var DatabaseSetupInterface

View File

@@ -0,0 +1,38 @@
<?php
/**
* sysPass
*
* @author nuxsmin
* @link https://syspass.org
* @copyright 2012-2018, Rubén Domínguez nuxsmin@$syspass.org
*
* This file is part of sysPass.
*
* sysPass 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 3 of the License, or
* (at your option) any later version.
*
* sysPass 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 sysPass. If not, see <http://www.gnu.org/licenses/>.
*/
namespace SP\Services\ItemPreset;
/**
* Interface ItemPresetInterface
*
* @package SP\Services\ItemPreset
*/
interface ItemPresetInterface
{
const ITEM_TYPE_PERMISSION = 'permission';
const ITEM_TYPE_TAGS = 'tag';
const ITEM_TYPE_PASSWORD = 'password';
const ITEM_TYPE_PRIVATE_ACCOUNT = 'private_account';
}

View File

@@ -0,0 +1,83 @@
<?php
/**
* sysPass
*
* @author nuxsmin
* @link https://syspass.org
* @copyright 2012-2018, Rubén Domínguez nuxsmin@$syspass.org
*
* This file is part of sysPass.
*
* sysPass 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 3 of the License, or
* (at your option) any later version.
*
* sysPass 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 sysPass. If not, see <http://www.gnu.org/licenses/>.
*/
namespace SP\Services\ItemPreset;
use SP\DataModel\ItemPresetData;
/**
* Class ItemPresetRequest
*
* @package SP\Services\ItemPreset
*/
class ItemPresetRequest
{
/**
* @var ItemPresetData
*/
private $itemPresetData;
/**
* @var mixed
*/
private $data;
/**
* ItemPresetRequest constructor.
*
* @param ItemPresetData $itemPresetData
* @param mixed $data
*/
public function __construct(ItemPresetData $itemPresetData, $data)
{
$this->itemPresetData = $itemPresetData;
$this->data = $data;
}
/**
* @return ItemPresetData
*/
public function getItemPresetData(): ItemPresetData
{
return $this->itemPresetData;
}
/**
* @return mixed
*/
public function getData()
{
return $this->data;
}
/**
* @return ItemPresetData
*/
public function prepareToPersist()
{
$this->itemPresetData->setData(serialize($this->data));
return $this->itemPresetData;
}
}

View File

@@ -22,50 +22,50 @@
* along with sysPass. If not, see <http://www.gnu.org/licenses/>.
*/
namespace SP\Services\Account;
namespace SP\Services\ItemPreset;
use SP\DataModel\AccountDefaultPermissionData;
use SP\DataModel\ItemPresetData;
use SP\DataModel\ItemSearchData;
use SP\Repositories\Account\AccountDefaultPermissionRepository;
use SP\Repositories\ItemPreset\ItemPresetRepository;
use SP\Repositories\NoSuchItemException;
use SP\Services\Service;
use SP\Services\ServiceException;
use SP\Storage\Database\QueryResult;
/**
* Class AccountDefaultPermissionService
* Class ItemPresetService
*
* @package SP\Services\Account
*/
class AccountDefaultPermissionService extends Service
class ItemPresetService extends Service
{
/**
* @var AccountDefaultPermissionRepository
* @var ItemPresetRepository
*/
private $accountDefaultPermissionRepository;
private $itemPresetRepository;
/**
* @param AccountDefaultPermissionData $accountDefaultPermissionData
* @param ItemPresetRequest $itemPresetRequest
*
* @return int
* @throws \SP\Core\Exceptions\ConstraintException
* @throws \SP\Core\Exceptions\QueryException
*/
public function create(AccountDefaultPermissionData $accountDefaultPermissionData)
public function create(ItemPresetRequest $itemPresetRequest)
{
return $this->accountDefaultPermissionRepository->create($accountDefaultPermissionData);
return $this->itemPresetRepository->create($itemPresetRequest->prepareToPersist());
}
/**
* @param AccountDefaultPermissionData $accountDefaultPermissionData
* @param ItemPresetRequest $itemPresetRequest
*
* @return int
* @throws \SP\Core\Exceptions\ConstraintException
* @throws \SP\Core\Exceptions\QueryException
*/
public function update(AccountDefaultPermissionData $accountDefaultPermissionData)
public function update(ItemPresetRequest $itemPresetRequest)
{
return $this->accountDefaultPermissionRepository->update($accountDefaultPermissionData);
return $this->itemPresetRepository->update($itemPresetRequest->prepareToPersist());
}
/**
@@ -73,15 +73,15 @@ class AccountDefaultPermissionService extends Service
*
* @param $id
*
* @return AccountDefaultPermissionService
* @return ItemPresetService
* @throws NoSuchItemException
* @throws \SP\Core\Exceptions\ConstraintException
* @throws \SP\Core\Exceptions\QueryException
*/
public function delete($id)
{
if ($this->accountDefaultPermissionRepository->delete($id) === 0) {
throw new NoSuchItemException(__u('Permiso no encontrada'));
if ($this->itemPresetRepository->delete($id) === 0) {
throw new NoSuchItemException(__u('Valor no encontrada'));
}
return $this;
@@ -92,35 +92,32 @@ class AccountDefaultPermissionService extends Service
*
* @param int $id
*
* @return AccountDefaultPermissionData
* @return ItemPresetData
* @throws NoSuchItemException
* @throws \SP\Core\Exceptions\ConstraintException
* @throws \SP\Core\Exceptions\QueryException
*/
public function getById($id)
{
$result = $this->accountDefaultPermissionRepository->getById($id);
$result = $this->itemPresetRepository->getById($id);
if ($result->getNumRows() === 0) {
throw new NoSuchItemException(__u('Permiso no encontrada'));
throw new NoSuchItemException(__u('Valor no encontrada'));
}
/** @var AccountDefaultPermissionData $data */
$data = $result->getData();
return $data->hydrate();
return $result->getData();
}
/**
* Returns all the items
*
* @return AccountDefaultPermissionData[]
* @return ItemPresetData[]
* @throws \SP\Core\Exceptions\ConstraintException
* @throws \SP\Core\Exceptions\QueryException
*/
public function getAll()
{
return $this->accountDefaultPermissionRepository->getAll()->getDataAsArray();
return $this->itemPresetRepository->getAll()->getDataAsArray();
}
/**
@@ -134,40 +131,44 @@ class AccountDefaultPermissionService extends Service
*/
public function search(ItemSearchData $itemSearchData)
{
return $this->accountDefaultPermissionRepository->search($itemSearchData);
return $this->itemPresetRepository->search($itemSearchData);
}
/**
* @return AccountDefaultPermissionData
* @param string $type
*
* @return ItemPresetData
* @throws \SP\Core\Exceptions\ConstraintException
* @throws \SP\Core\Exceptions\QueryException
*/
public function getForCurrentUser()
public function getForCurrentUser(string $type)
{
$userData = $this->context->getUserData();
return $this->getForUser($userData->getId(), $userData->getUserGroupId(), $userData->getUserProfileId());
return $this->getForUser($type, $userData->getId(), $userData->getUserGroupId(), $userData->getUserProfileId());
}
/**
* @param int $userId
* @param int $userGroupId
* @param int $userProfileId
* @param string $type
* @param int $userId
* @param int $userGroupId
* @param int $userProfileId
*
* @return AccountDefaultPermissionData
* @return ItemPresetData
* @throws \SP\Core\Exceptions\ConstraintException
* @throws \SP\Core\Exceptions\QueryException
*/
public function getForUser(int $userId, int $userGroupId, int $userProfileId)
public function getForUser(string $type, int $userId, int $userGroupId, int $userProfileId)
{
$result = $this->accountDefaultPermissionRepository->getByFilter(
$result = $this->itemPresetRepository->getByFilter(
$type,
$userId,
$userGroupId,
$userProfileId
);
if ($result->getNumRows() === 1) {
return $result->getData()->hydrate();
return $result->getData();
}
return null;
@@ -183,8 +184,8 @@ class AccountDefaultPermissionService extends Service
*/
public function deleteByIdBatch(array $ids)
{
if (($count = $this->accountDefaultPermissionRepository->deleteByIdBatch($ids)) !== count($ids)) {
throw new ServiceException(__u('Error al eliminar los permisos'), ServiceException::WARNING);
if (($count = $this->itemPresetRepository->deleteByIdBatch($ids)) !== count($ids)) {
throw new ServiceException(__u('Error al eliminar los valores'), ServiceException::WARNING);
}
return $count;
@@ -192,6 +193,6 @@ class AccountDefaultPermissionService extends Service
protected function initialize()
{
$this->accountDefaultPermissionRepository = $this->dic->get(AccountDefaultPermissionRepository::class);
$this->itemPresetRepository = $this->dic->get(ItemPresetRepository::class);
}
}

View File

@@ -45,7 +45,7 @@ final class UpgradeDatabaseService extends Service implements UpgradeInterface
/**
* @var array Versiones actualizables
*/
const UPGRADES = ['300.18010101', '300.18072302', '300.18072501', '300.18083001'];
const UPGRADES = ['300.18010101', '300.18072302', '300.18072501', '300.18083001', '300.18083002'];
/**
* @var Database
@@ -72,6 +72,7 @@ final class UpgradeDatabaseService extends Service implements UpgradeInterface
*
* @return bool
* @throws UpgradeException
* @throws FileException
*/
public function upgrade($version, ConfigData $configData)
{

View File

@@ -87,11 +87,12 @@ final class QueryResult
}
/**
* @return mixed
* @param string $class
*
* @return mixed|null
*/
public function getData()
public function getData(string $class = null)
{
// FIXME
if ($this->numRows === 1) {
return $this->data[0];
}

53
schemas/30018083002.sql Normal file
View File

@@ -0,0 +1,53 @@
DELIMITER $$
ALTER TABLE AccountDefaultPermission
CHANGE permission data blob $$
DROP INDEX uk_AccountDefaultPermission_01
ON AccountDefaultPermission $$
ALTER TABLE AccountDefaultPermission
DROP FOREIGN KEY fk_AccountDefaultPermission_userProfileId $$
ALTER TABLE AccountDefaultPermission
DROP FOREIGN KEY fk_AccountDefaultPermission_userGroupId $$
ALTER TABLE AccountDefaultPermission
DROP FOREIGN KEY fk_AccountDefaultPermission_userId $$
DROP INDEX fk_AccountDefaultPermission_userProfileId
ON AccountDefaultPermission $$
DROP INDEX fk_AccountDefaultPermission_userGroupId
ON AccountDefaultPermission $$
DROP INDEX fk_AccountDefaultPermission_userId
ON AccountDefaultPermission $$
ALTER TABLE AccountDefaultPermission
RENAME TO ItemPreset $$
ALTER TABLE ItemPreset
ADD type varchar(25) NOT NULL $$
ALTER TABLE ItemPreset
MODIFY COLUMN type varchar(25) NOT NULL
AFTER id $$
CREATE UNIQUE INDEX uk_ItemPreset_01
ON ItemPreset (hash) $$
CREATE INDEX fk_ItemPreset_userId
ON ItemPreset (userId) $$
CREATE INDEX fk_ItemPreset_userGroupId
ON ItemPreset (userGroupId) $$
CREATE INDEX fk_ItemPreset_userProfileId
ON ItemPreset (userProfileId) $$
ALTER TABLE ItemPreset
ADD CONSTRAINT fk_ItemPreset_userId
FOREIGN KEY (userId) REFERENCES User (id)
ON DELETE CASCADE
ON UPDATE CASCADE $$
ALTER TABLE ItemPreset
ADD CONSTRAINT fk_ItemPreset_userGroupId
FOREIGN KEY (userGroupId) REFERENCES UserGroup (id)
ON DELETE CASCADE
ON UPDATE CASCADE $$
ALTER TABLE ItemPreset
ADD CONSTRAINT fk_ItemPreset_userProfileId
FOREIGN KEY (userProfileId) REFERENCES UserProfile (id)
ON DELETE CASCADE
ON UPDATE CASCADE $$
UPDATE ItemPreset
SET type = 'permission'
WHERE type = '' $$
UPDATE ItemPreset
set hash = sha1(CONCAT(type, coalesce(userId, 0), coalesce(userGroupId, 0), coalesce(userProfileId, 0), priority)) $$

View File

@@ -51,29 +51,30 @@ CREATE TABLE `Account` (
ENGINE = InnoDB
DEFAULT CHARSET = utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `AccountDefaultPermission`;
DROP TABLE IF EXISTS `ItemPreset`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `AccountDefaultPermission`
CREATE TABLE `ItemPreset`
(
`id` int NOT NULL AUTO_INCREMENT,
`type` varchar(25) not null,
`userId` smallint(5) unsigned,
`userGroupId` smallint(5) unsigned,
`userProfileId` smallint(5) unsigned,
`fixed` tinyint(1) unsigned DEFAULT 0 NOT NULL,
`priority` tinyint(3) unsigned DEFAULT 0 NOT NULL,
`permission` blob,
`hash` varbinary(40) NOT NULL,
UNIQUE INDEX `uk_AccountDefaultPermission_01` (`hash`),
CONSTRAINT `fk_AccountDefaultPermission_userId`
`data` blob,
`hash` varbinary(40) NOT NULL,
UNIQUE INDEX `uk_ItemPreset_01` (`hash`),
CONSTRAINT `fk_ItemPreset_userId`
FOREIGN KEY (`userId`) REFERENCES `User` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `fk_AccountDefaultPermission_userGroupId`
CONSTRAINT `fk_ItemPreset_userGroupId`
FOREIGN KEY (`userGroupId`) REFERENCES `UserGroup` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `fk_AccountDefaultPermission_userProfileId`
CONSTRAINT `fk_ItemPreset_userProfileId`
FOREIGN KEY (`userProfileId`) REFERENCES `UserProfile` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE,

View File

@@ -25,22 +25,22 @@
namespace SP\Tests\Repositories;
use SP\Core\Exceptions\ConstraintException;
use SP\DataModel\AccountDefaultPermissionData;
use SP\DataModel\ItemPresetData;
use SP\DataModel\ItemSearchData;
use SP\Repositories\Account\AccountDefaultPermissionRepository;
use SP\Repositories\ItemPreset\ItemPresetRepository;
use SP\Storage\Database\DatabaseConnectionData;
use SP\Tests\DatabaseTestCase;
use function SP\Tests\setupContext;
/**
* Class AccountDefaultPermissionRepositoryTest
* Class ItemPresetRepositoryTest
*
* @package SP\Tests\Repositories
*/
class AccountDefaultPermissionRepositoryTest extends DatabaseTestCase
class ItemPresetRepositoryTest extends DatabaseTestCase
{
/**
* @var AccountDefaultPermissionRepository
* @var ItemPresetRepository
*/
private static $repository;
@@ -53,13 +53,13 @@ class AccountDefaultPermissionRepositoryTest extends DatabaseTestCase
{
$dic = setupContext();
self::$dataset = 'syspass_accountDefaultPermission.xml';
self::$dataset = 'syspass_itemPreset.xml';
// Datos de conexión a la BBDD
self::$databaseConnectionData = $dic->get(DatabaseConnectionData::class);
// Inicializar el repositorio
self::$repository = $dic->get(AccountDefaultPermissionRepository::class);
self::$repository = $dic->get(ItemPresetRepository::class);
}
/**
@@ -70,7 +70,7 @@ class AccountDefaultPermissionRepositoryTest extends DatabaseTestCase
{
$this->assertEquals(3, self::$repository->deleteByIdBatch([1, 2, 3, 10]));
$this->assertEquals(2, $this->conn->getRowCount('AccountDefaultPermission'));
$this->assertEquals(2, $this->conn->getRowCount('ItemPreset'));
$this->assertEquals(0, self::$repository->deleteByIdBatch([]));
}
@@ -87,7 +87,7 @@ class AccountDefaultPermissionRepositoryTest extends DatabaseTestCase
$this->assertEquals(0, self::$repository->delete(10));
$this->assertEquals(3, $this->conn->getRowCount('AccountDefaultPermission'));
$this->assertEquals(3, $this->conn->getRowCount('ItemPreset'));
}
/**
@@ -107,12 +107,13 @@ class AccountDefaultPermissionRepositoryTest extends DatabaseTestCase
*/
public function testUpdate()
{
$data = new AccountDefaultPermissionData();
$data = new ItemPresetData();
$data->id = 1;
$data->userGroupId = 1;
$data->fixed = 1;
$data->priority = 1;
$data->permission = 'data';
$data->data = 'data';
$data->type = 'permission';
self::$repository->update($data);
@@ -127,12 +128,13 @@ class AccountDefaultPermissionRepositoryTest extends DatabaseTestCase
{
$this->expectException(ConstraintException::class);
$data = new AccountDefaultPermissionData();
$data = new ItemPresetData();
$data->id = 1;
$data->userGroupId = 1;
$data->fixed = 1;
$data->priority = 10;
$data->permission = 'data';
$data->data = 'data';
$data->type = 'permission';
self::$repository->update($data);
}
@@ -145,9 +147,13 @@ class AccountDefaultPermissionRepositoryTest extends DatabaseTestCase
{
$this->expectException(ConstraintException::class);
$data = new AccountDefaultPermissionData();
$data = new ItemPresetData();
$data->id = 2;
$data->userId = 10;
$data->fixed = 1;
$data->priority = 1;
$data->data = 'data';
$data->type = 'permission';
self::$repository->update($data);
}
@@ -160,9 +166,13 @@ class AccountDefaultPermissionRepositoryTest extends DatabaseTestCase
{
$this->expectException(ConstraintException::class);
$data = new AccountDefaultPermissionData();
$data = new ItemPresetData();
$data->id = 2;
$data->userGroupId = 10;
$data->fixed = 1;
$data->priority = 1;
$data->data = 'data';
$data->type = 'permission';
self::$repository->update($data);
}
@@ -175,9 +185,13 @@ class AccountDefaultPermissionRepositoryTest extends DatabaseTestCase
{
$this->expectException(ConstraintException::class);
$data = new AccountDefaultPermissionData();
$data = new ItemPresetData();
$data->id = 2;
$data->userProfileId = 10;
$data->fixed = 1;
$data->priority = 1;
$data->data = 'data';
$data->type = 'permission';
self::$repository->update($data);
}
@@ -188,12 +202,13 @@ class AccountDefaultPermissionRepositoryTest extends DatabaseTestCase
*/
public function testUpdateUnknownId()
{
$data = new AccountDefaultPermissionData();
$data = new ItemPresetData();
$data->id = 10;
$data->userGroupId = 1;
$data->fixed = 1;
$data->priority = 1;
$data->permission = 'data';
$data->data = 'data';
$data->type = 'permission';
self::$repository->update($data);
@@ -206,11 +221,12 @@ class AccountDefaultPermissionRepositoryTest extends DatabaseTestCase
*/
public function testGetById()
{
$data = new AccountDefaultPermissionData();
$data = new ItemPresetData();
$data->id = 1;
$data->userId = 1;
$data->fixed = 0;
$data->priority = 0;
$data->type = 'permission';
$result = self::$repository->getById(1);
@@ -224,29 +240,32 @@ class AccountDefaultPermissionRepositoryTest extends DatabaseTestCase
*/
public function testGetAll()
{
$count = $this->conn->getRowCount('AccountDefaultPermission');
$count = $this->conn->getRowCount('ItemPreset');
$result = self::$repository->getAll();
$this->assertEquals($count, $result->getNumRows());
/** @var AccountDefaultPermissionData[] $data */
/** @var ItemPresetData[] $data */
$data = $result->getDataAsArray();
$this->assertCount($count, $data);
$this->assertInstanceOf(AccountDefaultPermissionData::class, $data[0]);
$this->assertInstanceOf(ItemPresetData::class, $data[0]);
$this->assertEquals(1, $data[0]->getId());
$this->assertEquals('permission', $data[0]->getType());
$this->assertEquals(1, $data[0]->getUserId());
$this->assertNull($data[0]->getUserGroupId());
$this->assertNull($data[0]->getUserProfileId());
$this->assertNull($data[0]->getPermission());
$this->assertNull($data[0]->getData());
$this->assertEquals(0, $data[0]->getFixed());
$this->assertEquals(0, $data[0]->getPriority());
$this->assertInstanceOf(AccountDefaultPermissionData::class, $data[1]);
$this->assertInstanceOf(ItemPresetData::class, $data[1]);
$this->assertEquals(2, $data[1]->getId());
$this->assertEquals('permission', $data[1]->getType());
$this->assertInstanceOf(AccountDefaultPermissionData::class, $data[2]);
$this->assertInstanceOf(ItemPresetData::class, $data[2]);
$this->assertEquals(3, $data[2]->getId());
$this->assertEquals('permission', $data[2]->getType());
}
/**
@@ -267,10 +286,11 @@ class AccountDefaultPermissionRepositoryTest extends DatabaseTestCase
$this->assertCount(1, $data);
$this->assertInstanceOf(\stdClass::class, $data[0]);
$this->assertEquals(4, $data[0]->id);
$this->assertEquals('permission', $data[0]->type);
$this->assertEquals(2, $data[0]->userId);
$this->assertNull($data[0]->userGroupId);
$this->assertNull($data[0]->userProfileId);
$this->assertNull($data[0]->permission);
$this->assertNull($data[0]->data);
$this->assertEquals(0, $data[0]->fixed);
$this->assertEquals(0, $data[0]->priority);
$this->assertEquals('sysPass demo', $data[0]->userName);
@@ -287,10 +307,11 @@ class AccountDefaultPermissionRepositoryTest extends DatabaseTestCase
$this->assertCount(1, $data);
$this->assertInstanceOf(\stdClass::class, $data[0]);
$this->assertEquals(2, $data[0]->id);
$this->assertEquals('permission', $data[0]->type);
$this->assertNull($data[0]->userId);
$this->assertEquals(1, $data[0]->userGroupId);
$this->assertNull($data[0]->userProfileId);
$this->assertNull($data[0]->permission);
$this->assertNull($data[0]->data);
$this->assertEquals(0, $data[0]->fixed);
$this->assertEquals(10, $data[0]->priority);
$this->assertEquals('Admins', $data[0]->userGroupName);
@@ -307,10 +328,11 @@ class AccountDefaultPermissionRepositoryTest extends DatabaseTestCase
$this->assertCount(1, $data);
$this->assertInstanceOf(\stdClass::class, $data[0]);
$this->assertEquals(5, $data[0]->id);
$this->assertEquals('permission', $data[0]->type);
$this->assertNull($data[0]->userId);
$this->assertNull($data[0]->userGroupId);
$this->assertEquals(3, $data[0]->userProfileId);
$this->assertNull($data[0]->permission);
$this->assertNull($data[0]->data);
$this->assertEquals(0, $data[0]->fixed);
$this->assertEquals(10, $data[0]->priority);
$this->assertEquals('Usuarios', $data[0]->userProfileName);
@@ -333,12 +355,13 @@ class AccountDefaultPermissionRepositoryTest extends DatabaseTestCase
*/
public function testCreate()
{
$data = new AccountDefaultPermissionData();
$data = new ItemPresetData();
$data->id = 6;
$data->userGroupId = 1;
$data->fixed = 1;
$data->priority = 20;
$data->permission = 'data';
$data->data = 'data';
$data->type = 'permission';
$id = self::$repository->create($data);
@@ -354,11 +377,12 @@ class AccountDefaultPermissionRepositoryTest extends DatabaseTestCase
{
$this->expectException(ConstraintException::class);
$data = new AccountDefaultPermissionData();
$data = new ItemPresetData();
$data->userGroupId = 1;
$data->fixed = 1;
$data->priority = 10;
$data->permission = 'data';
$data->data = 'data';
$data->type = 'permission';
self::$repository->create($data);
}
@@ -376,14 +400,14 @@ class AccountDefaultPermissionRepositoryTest extends DatabaseTestCase
*/
public function testGetByFilter($userId, $userGroupId, $userProfileId, $expected)
{
$result = self::$repository->getByFilter($userId, $userGroupId, $userProfileId);
$result = self::$repository->getByFilter('permission', $userId, $userGroupId, $userProfileId);
$this->assertEquals(1, $result->getNumRows());
/** @var AccountDefaultPermissionData $data */
/** @var ItemPresetData $data */
$data = $result->getData();
$this->assertInstanceOf(AccountDefaultPermissionData::class, $data);
$this->assertInstanceOf(ItemPresetData::class, $data);
$this->assertEquals($expected, $data->getId());
}

View File

@@ -22,27 +22,28 @@
* along with sysPass. If not, see <http://www.gnu.org/licenses/>.
*/
namespace SP\Tests\Services\Account;
namespace SP\Tests\Services\ItemPreset;
use SP\Core\Exceptions\ConstraintException;
use SP\DataModel\AccountDefaultPermissionData;
use SP\DataModel\AccountPermission;
use SP\DataModel\ItemPresetData;
use SP\DataModel\ItemSearchData;
use SP\Repositories\NoSuchItemException;
use SP\Services\Account\AccountDefaultPermissionService;
use SP\Services\ItemPreset\ItemPresetRequest;
use SP\Services\ItemPreset\ItemPresetService;
use SP\Storage\Database\DatabaseConnectionData;
use SP\Tests\DatabaseTestCase;
use function SP\Tests\setupContext;
/**
* Class AccountDefaultPermissionServiceTest
* Class ItemPresetServiceTest
*
* @package SP\Tests\Services\Account
* @package SP\Tests\Services\ItemPreset
*/
class AccountDefaultPermissionServiceTest extends DatabaseTestCase
class ItemPresetServiceTest extends DatabaseTestCase
{
/**
* @var AccountDefaultPermissionService
* @var ItemPresetService
*/
private static $service;
@@ -55,13 +56,13 @@ class AccountDefaultPermissionServiceTest extends DatabaseTestCase
{
$dic = setupContext();
self::$dataset = 'syspass_accountDefaultPermission.xml';
self::$dataset = 'syspass_itemPreset.xml';
// Datos de conexión a la BBDD
self::$databaseConnectionData = $dic->get(DatabaseConnectionData::class);
// Inicializar el servicio
self::$service = $dic->get(AccountDefaultPermissionService::class);
self::$service = $dic->get(ItemPresetService::class);
}
/**
@@ -77,9 +78,9 @@ class AccountDefaultPermissionServiceTest extends DatabaseTestCase
*/
public function testGetForUser($userId, $userGroupId, $userProfileId, $expected)
{
$result = self::$service->getForUser($userId, $userGroupId, $userProfileId);
$result = self::$service->getForUser('permission', $userId, $userGroupId, $userProfileId);
$this->assertInstanceOf(AccountDefaultPermissionData::class, $result);
$this->assertInstanceOf(ItemPresetData::class, $result);
$this->assertEquals($expected, $result->getId());
}
@@ -107,15 +108,16 @@ class AccountDefaultPermissionServiceTest extends DatabaseTestCase
*/
public function testGetById()
{
$data = new AccountDefaultPermissionData();
$data = new ItemPresetData();
$data->id = 1;
$data->userId = 1;
$data->fixed = 0;
$data->priority = 0;
$data->type = 'permission';
$result = self::$service->getById(1);
$this->assertInstanceOf(AccountDefaultPermissionData::class, $result);
$this->assertInstanceOf(ItemPresetData::class, $result);
$this->assertEquals($data, $result);
}
@@ -125,24 +127,25 @@ class AccountDefaultPermissionServiceTest extends DatabaseTestCase
*/
public function testGetAll()
{
$count = $this->conn->getRowCount('AccountDefaultPermission');
$count = $this->conn->getRowCount('ItemPreset');
$result = self::$service->getAll();
$this->assertCount($count, $result);
$this->assertInstanceOf(AccountDefaultPermissionData::class, $result[0]);
$this->assertInstanceOf(ItemPresetData::class, $result[0]);
$this->assertEquals(1, $result[0]->getId());
$this->assertEquals('permission', $result[0]->getType());
$this->assertEquals(1, $result[0]->getUserId());
$this->assertNull($result[0]->getUserGroupId());
$this->assertNull($result[0]->getUserProfileId());
$this->assertNull($result[0]->getPermission());
$this->assertNull($result[0]->getData());
$this->assertEquals(0, $result[0]->getFixed());
$this->assertEquals(0, $result[0]->getPriority());
$this->assertInstanceOf(AccountDefaultPermissionData::class, $result[1]);
$this->assertInstanceOf(ItemPresetData::class, $result[1]);
$this->assertEquals(2, $result[1]->getId());
$this->assertInstanceOf(AccountDefaultPermissionData::class, $result[2]);
$this->assertInstanceOf(ItemPresetData::class, $result[2]);
$this->assertEquals(3, $result[2]->getId());
}
@@ -150,6 +153,7 @@ class AccountDefaultPermissionServiceTest extends DatabaseTestCase
* @throws \SP\Core\Exceptions\ConstraintException
* @throws \SP\Core\Exceptions\QueryException
* @throws \SP\Repositories\NoSuchItemException
* @throws \SP\Core\Exceptions\NoSuchPropertyException
*/
public function testUpdate()
{
@@ -159,19 +163,21 @@ class AccountDefaultPermissionServiceTest extends DatabaseTestCase
$accountPermission->setUserGroupsView([2]);
$accountPermission->setUserGroupsEdit([1, 3]);
$data = new AccountDefaultPermissionData();
$data = new ItemPresetData();
$data->id = 1;
$data->userGroupId = 1;
$data->fixed = 1;
$data->priority = 1;
$data->setAccountPermission($accountPermission);
$data->type = 'permission';
self::$service->update($data);
$request = new ItemPresetRequest($data, $accountPermission);
self::$service->update($request);
$resultData = self::$service->getById(1);
$this->assertEquals($data, $resultData);
$this->assertEquals($accountPermission, $resultData->getAccountPermission());
$this->assertEquals($accountPermission, $resultData->hydrate(AccountPermission::class));
}
/**
@@ -186,13 +192,16 @@ class AccountDefaultPermissionServiceTest extends DatabaseTestCase
$accountPermission->setUserGroupsView([2]);
$accountPermission->setUserGroupsEdit([1, 3]);
$data = new AccountDefaultPermissionData();
$data = new ItemPresetData();
$data->id = 10;
$data->userGroupId = 1;
$data->fixed = 1;
$data->priority = 1;
$data->type = 'permission';
$this->assertEquals(0, self::$service->update($data));
$request = new ItemPresetRequest($data, $accountPermission);
$this->assertEquals(0, self::$service->update($request));
}
/**
@@ -206,7 +215,7 @@ class AccountDefaultPermissionServiceTest extends DatabaseTestCase
->delete(3)
->delete(4);
$this->assertEquals(3, $this->conn->getRowCount('AccountDefaultPermission'));
$this->assertEquals(3, $this->conn->getRowCount('ItemPreset'));
}
/**
@@ -239,10 +248,11 @@ class AccountDefaultPermissionServiceTest extends DatabaseTestCase
$this->assertCount(1, $data);
$this->assertInstanceOf(\stdClass::class, $data[0]);
$this->assertEquals(4, $data[0]->id);
$this->assertEquals('permission', $data[0]->type);
$this->assertEquals(2, $data[0]->userId);
$this->assertNull($data[0]->userGroupId);
$this->assertNull($data[0]->userProfileId);
$this->assertNull($data[0]->permission);
$this->assertNull($data[0]->data);
$this->assertEquals(0, $data[0]->fixed);
$this->assertEquals(0, $data[0]->priority);
$this->assertEquals('sysPass demo', $data[0]->userName);
@@ -259,10 +269,11 @@ class AccountDefaultPermissionServiceTest extends DatabaseTestCase
$this->assertCount(1, $data);
$this->assertInstanceOf(\stdClass::class, $data[0]);
$this->assertEquals(2, $data[0]->id);
$this->assertEquals('permission', $data[0]->type);
$this->assertNull($data[0]->userId);
$this->assertEquals(1, $data[0]->userGroupId);
$this->assertNull($data[0]->userProfileId);
$this->assertNull($data[0]->permission);
$this->assertNull($data[0]->data);
$this->assertEquals(0, $data[0]->fixed);
$this->assertEquals(10, $data[0]->priority);
$this->assertEquals('Admins', $data[0]->userGroupName);
@@ -279,10 +290,11 @@ class AccountDefaultPermissionServiceTest extends DatabaseTestCase
$this->assertCount(1, $data);
$this->assertInstanceOf(\stdClass::class, $data[0]);
$this->assertEquals(5, $data[0]->id);
$this->assertEquals('permission', $data[0]->type);
$this->assertNull($data[0]->userId);
$this->assertNull($data[0]->userGroupId);
$this->assertEquals(3, $data[0]->userProfileId);
$this->assertNull($data[0]->permission);
$this->assertNull($data[0]->data);
$this->assertEquals(0, $data[0]->fixed);
$this->assertEquals(10, $data[0]->priority);
$this->assertEquals('Usuarios', $data[0]->userProfileName);
@@ -305,9 +317,9 @@ class AccountDefaultPermissionServiceTest extends DatabaseTestCase
*/
public function testGetForCurrentUser()
{
$data = self::$service->getForCurrentUser();
$data = self::$service->getForCurrentUser('permission');
$this->assertInstanceOf(AccountDefaultPermissionData::class, $data);
$this->assertInstanceOf(ItemPresetData::class, $data);
$this->assertEquals(2, $data->getId());
}
@@ -315,6 +327,7 @@ class AccountDefaultPermissionServiceTest extends DatabaseTestCase
* @throws ConstraintException
* @throws NoSuchItemException
* @throws \SP\Core\Exceptions\QueryException
* @throws \SP\Core\Exceptions\NoSuchPropertyException
*/
public function testCreate()
{
@@ -324,17 +337,22 @@ class AccountDefaultPermissionServiceTest extends DatabaseTestCase
$accountPermission->setUserGroupsView([2]);
$accountPermission->setUserGroupsEdit([1, 3]);
$data = new AccountDefaultPermissionData();
$data = new ItemPresetData();
$data->id = 6;
$data->userGroupId = 1;
$data->fixed = 1;
$data->priority = 20;
$data->setAccountPermission($accountPermission);
$data->type = 'permission';
$id = self::$service->create($data);
$request = new ItemPresetRequest($data, $accountPermission);
$id = self::$service->create($request);
$result = self::$service->getById($id);
$this->assertEquals($data->id, $id);
$this->assertEquals($data, self::$service->getById($id));
$this->assertEquals($data, $result);
$this->assertEquals($accountPermission, $result->hydrate(AccountPermission::class));
}
/**
@@ -349,13 +367,16 @@ class AccountDefaultPermissionServiceTest extends DatabaseTestCase
$accountPermission->setUserGroupsView([2]);
$accountPermission->setUserGroupsEdit([1, 3]);
$data = new AccountDefaultPermissionData();
$data = new ItemPresetData();
$data->userGroupId = 1;
$data->fixed = 1;
$data->priority = 10;
$data->type = 'permission';
$request = new ItemPresetRequest($data, $accountPermission);
$this->expectException(ConstraintException::class);
self::$service->create($data);
self::$service->create($request);
}
}

View File

@@ -328,7 +328,7 @@
<action multiple="1">
<id>304</id>
<name>CLIENT_CREATE</name>
<text>Nuevo CLiente</text>
<text>Nuevo Cliente</text>
<route>client/create</route>
</action>
<action multiple="1">
@@ -829,4 +829,40 @@
<text>Buscar Notificación</text>
<route>notification/search</route>
</action>
<action multiple="1">
<id>1801</id>
<name>ITEMPRESET</name>
<text>Gestión Permisos</text>
<route>itemPreset/index</route>
</action>
<action multiple="1">
<id>1802</id>
<name>ITEMPRESET_SEARCH</name>
<text>Buscar Permiso</text>
<route>itemPreset/search</route>
</action>
<action multiple="1">
<id>1803</id>
<name>ITEMPRESET_VIEW</name>
<text>Ver Permiso</text>
<route>itemPreset/view</route>
</action>
<action multiple="1">
<id>1804</id>
<name>ITEMPRESET_CREATE</name>
<text>Nuevo Permiso</text>
<route>itemPreset/create</route>
</action>
<action multiple="1">
<id>1805</id>
<name>ITEMPRESET_EDIT</name>
<text>Editar Permiso</text>
<route>itemPreset/edit</route>
</action>
<action multiple="1">
<id>1806</id>
<name>ITEMPRESET_DELETE</name>
<text>Eliminar Permiso</text>
<route>itemPreset/delete</route>
</action>
</actions>

View File

@@ -9,11 +9,11 @@
<authBasicAutoLoginEnabled>1</authBasicAutoLoginEnabled>
<authBasicDomain></authBasicDomain>
<authBasicEnabled>1</authBasicEnabled>
<backup_hash>e3a34a99dcadc6abf94883a67e91ed05f49eed81</backup_hash>
<backup_hash>c8fe86b8b3f1ac71e62daf6c731065910f775dcf</backup_hash>
<checkUpdates>0</checkUpdates>
<checknotices>0</checknotices>
<configDate>1535584064</configDate>
<configHash>0cf71c39a7de70930b31dd6c12631cbf2849a44b</configHash>
<configDate>1535637654</configDate>
<configHash>c6cfea1957d8c1b4e30c916f724197a432159564</configHash>
<configSaver></configSaver>
<configVersion></configVersion>
<databaseVersion></databaseVersion>
@@ -32,7 +32,7 @@
<dokuwikiUrlBase></dokuwikiUrlBase>
<dokuwikiUser></dokuwikiUser>
<encryptSession>0</encryptSession>
<export_hash>0d5bfbb33cdcc40548d29018157bf99a1c03b528</export_hash>
<export_hash>d635cf0e628e8214b00aff938a09f5be6158e590</export_hash>
<filesAllowedExts>
<item type="filesAllowedExts">PDF</item>
<item type="filesAllowedExts">JPG</item>

View File

@@ -540,6 +540,6 @@
<field name="used">0</field>
</row>
</table_data>
<table_data name="AccountDefaultPermission"/>
<table_data name="ItemPreset"/>
</database>
</mysqldump>

View File

@@ -432,6 +432,6 @@
<field name="isPrivateGroup">0</field>
</row>
</table_data>
<table_data name="AccountDefaultPermission"/>
<table_data name="ItemPreset"/>
</database>
</mysqldump>

View File

@@ -141,7 +141,7 @@
<field name="preferences" xsi:nil="true" />
</row>
</table_data>
<table_data name="AccountDefaultPermission">
<table_data name="ItemPreset">
<row>
<field name="id">1</field>
<field name="userId">1</field>
@@ -149,8 +149,9 @@
<field name="userProfileId" xsi:nil="true"/>
<field name="fixed">0</field>
<field name="priority">0</field>
<field name="permission" xsi:nil="true"/>
<field name="hash">e3cbba8883fe746c6e35783c9404b4bc0c7ee9eb</field>
<field name="data" xsi:nil="true"/>
<field name="type">permission</field>
<field name="hash">284985459df4616aa682a6de4c4994a9fedf164d</field>
</row>
<row>
<field name="id">2</field>
@@ -159,8 +160,9 @@
<field name="userProfileId" xsi:nil="true"/>
<field name="fixed">0</field>
<field name="priority">10</field>
<field name="permission" xsi:nil="true"/>
<field name="hash">9c5975f336463693254939bfde7042459607d834</field>
<field name="data" xsi:nil="true"/>
<field name="type">permission</field>
<field name="hash">ac1de29cfbc9db8c63b3b109c899148e904ccced</field>
</row>
<row>
<field name="id">3</field>
@@ -169,8 +171,9 @@
<field name="userProfileId">1</field>
<field name="fixed">0</field>
<field name="priority">20</field>
<field name="permission" xsi:nil="true"/>
<field name="hash">19fc3ecd72937e313c4a4a7023eb0ab07890cee7</field>
<field name="data" xsi:nil="true"/>
<field name="type">permission</field>
<field name="hash">3ec16d2bece6de02ed9423f98fcaaba260ffd36b</field>
</row>
<row>
<field name="id">4</field>
@@ -179,8 +182,9 @@
<field name="userProfileId" xsi:nil="true"/>
<field name="fixed">0</field>
<field name="priority">0</field>
<field name="permission" xsi:nil="true"/>
<field name="hash">a4ac914c09d7c097fe1f4f96b897e625b6922069</field>
<field name="data" xsi:nil="true"/>
<field name="type">permission</field>
<field name="hash">8eca5d3518e5531aa968ce0d5a7221f659f5d0ee</field>
</row>
<row>
<field name="id">5</field>
@@ -189,8 +193,9 @@
<field name="userProfileId">3</field>
<field name="fixed">0</field>
<field name="priority">10</field>
<field name="permission" xsi:nil="true"/>
<field name="hash">0e718dd1e04a0f28f7e31ddfaed950e2d70ee477</field>
<field name="data" xsi:nil="true"/>
<field name="type">permission</field>
<field name="hash">fa66da8c08bf2728dfa90bb0682494a763dc0c11</field>
</row>
</table_data>
</database>