1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
<?php
/* --------------------------------------------------------------
AdminAccessPermissionReader.inc.php 2018-01-22
Gambio GmbH
http://www.gambio.de
Copyright (c) 2017 Gambio GmbH
Released under the GNU General Public License (Version 2)
[http://www.gnu.org/licenses/gpl-2.0.html]
--------------------------------------------------------------
*/
/**
* Class AdminAccessPermissionReader
*
* @category System
* @package AdminAccess
* @subpackage Readers
*/
class AdminAccessPermissionReader implements AdminAccessPermissionReaderInterface
{
/**
* @var CI_DB_query_builder
*/
protected $queryBuilder;
/**
* @var AdminAccessPermissionFactoryInterface
*/
protected $permissionFactory;
/**
* @var string
*/
protected $permissionTable;
/**
* AdminAccessPermissionReader constructor.
*
* @param CI_DB_query_builder $queryBuilder Query builder.
* @param AdminAccessPermissionFactoryInterface $permissionFactory Permission factory.
*/
public function __construct(CI_DB_query_builder $queryBuilder,
AdminAccessPermissionFactoryInterface $permissionFactory)
{
$this->queryBuilder = $queryBuilder;
$this->permissionFactory = $permissionFactory;
$this->permissionTable = 'admin_access_permissions';
}
/**
* Returns an AdminAccessPermission object by given AdminAccessRole and AdminAccessGroup objects.
*
* @param AdminAccessRoleInterface $accessRole Role object.
* @param AdminAccessGroupInterface $accessGroup Group object.
*
* @return AdminAccessPermissionPresentationInterface|AdminAccessPermissionPersistenceInterface|null Permission
* object or null
* if permission
* not found.
*/
public function get(AdminAccessRoleInterface $accessRole, AdminAccessGroupInterface $accessGroup)
{
$permissionData = $this->queryBuilder->select()->from($this->permissionTable)->where([
'admin_access_role_id' => $accessRole->getId(),
'admin_access_group_id' => $accessGroup->getId(),
])->get()->row_array();
return $this->_createPermissionObject($permissionData, $accessRole, $accessGroup);
}
/**
* Returns an AdminAccessPermissionCollection by a given AdminAccessRole and AdminAccessGroupCollection object.
*
* @param AdminAccessRoleInterface $accessRole User role to find permission for.
* @param AdminAccessGroupCollection $groupCollection Collection of all groups in system.
*
* @return AdminAccessPermissionCollection Permission collection.
*/
public function getByGroupCollection(AdminAccessRoleInterface $accessRole,
AdminAccessGroupCollection $groupCollection)
{
$resultArray = [];
/** @var \AdminAccessGroupInterface $group */
foreach($groupCollection->getArray() as $group)
{
$resultArray[] = $this->get($accessRole, $group);
}
return $this->permissionFactory->createAdminAccessPermissionCollection($resultArray);
}
/**
* Returns an AdminAccessPermission objects, that gets its property values from permission data array.
*
* @param array|null $permissionData Permission data.
* @param AdminAccessRoleInterface $role Role needed to create permission object.
* @param AdminAccessGroupInterface $group Group needed to create permission object.
*
* @return AdminAccessPermissionPersistenceInterface|\AdminAccessPermissionPresentationInterface Permission object.
*/
protected function _createPermissionObject($permissionData,
AdminAccessRoleInterface $role,
AdminAccessGroupInterface $group)
{
$permission = $this->permissionFactory->createAdminAccessPermission();
$permission->setRole($role);
$permission->setGroup($group);
if($permissionData !== null && $permissionData['reading_granted'])
{
$permission->grantReading();
}
if($permissionData !== null && $permissionData['writing_granted'])
{
$permission->grantWriting();
}
if($permissionData !== null && $permissionData['deleting_granted'])
{
$permission->grantDeleting();
}
return $permission;
}
}