Merged in bugfix/HOR-4201 (pull request #6245)
HOR-4201 Approved-by: Julio Cesar Laura Avendaño <contact@julio-laura.com>
This commit is contained in:
committed by
Julio Cesar Laura Avendaño
parent
fbd4438ddd
commit
ae28e48861
@@ -401,6 +401,38 @@ class RbacUsers extends BaseRbacUsers
|
||||
|
||||
return $array;
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify if user have the permission
|
||||
*
|
||||
* @param string $userUid
|
||||
* @param string $permission
|
||||
*
|
||||
* @return bool
|
||||
* @throws Exception
|
||||
*/
|
||||
public function verifyPermission($userUid, $permission)
|
||||
{
|
||||
try {
|
||||
$criteria = new Criteria('rbac');
|
||||
$criteria->clearSelectColumns();
|
||||
$criteria->add(PermissionsPeer::PER_CODE, $permission, Criteria::EQUAL);
|
||||
$criteria->addJoin(UsersRolesPeer::ROL_UID, RolesPermissionsPeer::ROL_UID, Criteria::LEFT_JOIN);
|
||||
$criteria->addJoin(RolesPermissionsPeer::PER_UID, PermissionsPeer::PER_UID, Criteria::LEFT_JOIN);
|
||||
$criteria->add(UsersRolesPeer::USR_UID, $userUid, Criteria::EQUAL);
|
||||
|
||||
$response = false;
|
||||
$permission = PermissionsPeer::doSelectOne($criteria);
|
||||
if ($permission) {
|
||||
$response = true;
|
||||
}
|
||||
|
||||
return $response;
|
||||
} catch (Exception $error) {
|
||||
throw($error);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// Users
|
||||
|
||||
@@ -0,0 +1,131 @@
|
||||
<?php
|
||||
|
||||
namespace ProcessMaker\BusinessModel;
|
||||
|
||||
use Exception;
|
||||
use Tests\TestCase;
|
||||
|
||||
class GroupTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @var Group
|
||||
*/
|
||||
protected $group;
|
||||
|
||||
/**
|
||||
* Return instance Group
|
||||
*
|
||||
* @return Group
|
||||
*/
|
||||
public function getInstanceGroup()
|
||||
{
|
||||
return $this->group;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set instance group
|
||||
*
|
||||
* @param Group $group
|
||||
*/
|
||||
public function setInstanceGroup(Group $group)
|
||||
{
|
||||
$this->group = $group;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets up the unit tests.
|
||||
*/
|
||||
protected function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
//Move section
|
||||
global $RBAC;
|
||||
$RBAC->initRBAC();
|
||||
$RBAC->loadUserRolePermission($RBAC->sSystem, '00000000000000000000000000000001');
|
||||
|
||||
$this->setInstanceGroup(new Group());
|
||||
}
|
||||
|
||||
/**
|
||||
* Information Group
|
||||
*
|
||||
* @return array Definition Data Group
|
||||
*/
|
||||
public function testDataGroup()
|
||||
{
|
||||
$response = [
|
||||
'GRP_TITLE' => 'Group Test Unit',
|
||||
'GRP_STATUS' => 'ACTIVE'
|
||||
];
|
||||
return $response;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create group
|
||||
*
|
||||
* @depends testDataGroup
|
||||
*
|
||||
* @param array $dataGroup Information Group
|
||||
*
|
||||
* @return string group Uid
|
||||
*/
|
||||
public function testCreate($dataGroup)
|
||||
{
|
||||
$response = $this->getInstanceGroup()->create($dataGroup);
|
||||
|
||||
$this->assertArrayHasKey('GRP_UID', $response);
|
||||
|
||||
return $response['GRP_UID'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get users from a group created recently.
|
||||
*
|
||||
* @depends testCreate
|
||||
* @param string $groupUid Uid group
|
||||
*/
|
||||
public function testGetUsersOfGroup($groupUid)
|
||||
{
|
||||
$response = $this->getInstanceGroup()->getUsers('USERS', $groupUid);
|
||||
$this->assertCount(0, $response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get available users for assign to a group
|
||||
*
|
||||
* @depends testCreate
|
||||
* @param string $groupUid Uid group
|
||||
*/
|
||||
public function testGetUsersAvailable($groupUid)
|
||||
{
|
||||
$response = $this->getInstanceGroup()->getUsers('AVAILABLE-USERS', $groupUid);
|
||||
$this->assertCount(1, $response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtain assigned supervisors
|
||||
*
|
||||
* @depends testCreate
|
||||
* @param string $groupUid Uid group
|
||||
*/
|
||||
public function testGetUsersSupervisor($groupUid)
|
||||
{
|
||||
$response = $this->getInstanceGroup()->getUsers('SUPERVISOR', $groupUid);
|
||||
$this->assertCount(0, $response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete group
|
||||
*
|
||||
* @depends testCreate
|
||||
* @expectedException Exception
|
||||
*
|
||||
* @param string $groupUid Uid Group
|
||||
*/
|
||||
public function testDelete($groupUid)
|
||||
{
|
||||
$this->getInstanceGroup()->delete($groupUid);
|
||||
$this->getInstanceGroup()->getGroup($groupUid);
|
||||
}
|
||||
}
|
||||
@@ -217,5 +217,99 @@ class GroupUser extends BaseGroupUser
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load All users by groupUid
|
||||
*
|
||||
* @param $groupUid
|
||||
* @param string $type
|
||||
* @param string $filter
|
||||
* @param string $sortField
|
||||
* @param string $sortDir
|
||||
* @param int $start
|
||||
* @param int $limit
|
||||
* @return array
|
||||
* @throws Exception
|
||||
*/
|
||||
public function getUsersbyGroup($groupUid, $type = 'USERS', $filter = '', $sortField = 'USR_USERNAME', $sortDir = 'ASC', $start = 0, $limit = null)
|
||||
{
|
||||
try {
|
||||
$validSorting = ['USR_UID', 'USR_USERNAME', 'USR_FIRSTNAME', 'USR_LASTNAME', 'USR_EMAIL', 'USR_STATUS'];
|
||||
$response = [
|
||||
'start' => !empty($start) ? $start : 0,
|
||||
'limit' => !empty($limit) ? $limit : 0,
|
||||
'filter' => !empty($filter) ? $filter : '',
|
||||
'data' => []
|
||||
];
|
||||
|
||||
|
||||
$criteria = new Criteria('workflow');
|
||||
$criteria->add(UsersPeer::USR_STATUS, 'CLOSED', Criteria::NOT_EQUAL);
|
||||
if ($type === 'AVAILABLE-USERS') {
|
||||
$subQuery = 'SELECT ' . GroupUserPeer::USR_UID .
|
||||
' FROM ' . GroupUserPeer::TABLE_NAME .
|
||||
' WHERE ' . GroupUserPeer::GRP_UID . ' = "' . $groupUid . '" ' .
|
||||
'UNION SELECT "' . RBAC::GUEST_USER_UID . '"';
|
||||
|
||||
$criteria->add(UsersPeer::USR_UID, UsersPeer::USR_UID . " NOT IN ($subQuery)", Criteria::CUSTOM);
|
||||
} else {
|
||||
//USERS - SUPERVISOR
|
||||
$criteria->addJoin(GroupUserPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN);
|
||||
$criteria->add(GroupUserPeer::GRP_UID, $groupUid, Criteria::EQUAL);
|
||||
}
|
||||
|
||||
if (!empty($filter)) {
|
||||
$criteria->add($criteria->getNewCriterion(UsersPeer::USR_USERNAME, '%' . $filter . '%', Criteria::LIKE)->
|
||||
addOr($criteria->getNewCriterion(UsersPeer::USR_FIRSTNAME, '%' . $filter . '%', Criteria::LIKE)->
|
||||
addOr($criteria->getNewCriterion(UsersPeer::USR_LASTNAME, '%' . $filter . '%', Criteria::LIKE))));
|
||||
}
|
||||
$response['total'] = UsersPeer::doCount($criteria);
|
||||
|
||||
$criteria->addSelectColumn(UsersPeer::USR_UID);
|
||||
$criteria->addSelectColumn(UsersPeer::USR_USERNAME);
|
||||
$criteria->addSelectColumn(UsersPeer::USR_FIRSTNAME);
|
||||
$criteria->addSelectColumn(UsersPeer::USR_LASTNAME);
|
||||
$criteria->addSelectColumn(UsersPeer::USR_EMAIL);
|
||||
$criteria->addSelectColumn(UsersPeer::USR_STATUS);
|
||||
|
||||
$sort = UsersPeer::USR_USERNAME;
|
||||
if (!empty($sortField) && in_array($sortField, $validSorting, true)) {
|
||||
$sort = UsersPeer::TABLE_NAME . '.' . $sortField;
|
||||
}
|
||||
|
||||
if (!empty($sortDir) && strtoupper($sortDir) === 'DESC') {
|
||||
$criteria->addDescendingOrderByColumn($sort);
|
||||
} else {
|
||||
$criteria->addAscendingOrderByColumn($sort);
|
||||
}
|
||||
|
||||
if (!empty($start)) {
|
||||
$criteria->setOffset((int)$start);
|
||||
}
|
||||
|
||||
if (!empty($limit)) {
|
||||
$criteria->setLimit((int)$limit);
|
||||
}
|
||||
|
||||
$dataSet = UsersPeer::doSelectRS($criteria);
|
||||
$dataSet->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
||||
$userRbac = new RbacUsers();
|
||||
while ($dataSet->next()) {
|
||||
$row = $dataSet->getRow();
|
||||
if ($type === 'SUPERVISOR') {
|
||||
if ($userRbac->verifyPermission($row['USR_UID'], 'PM_SUPERVISOR')) {
|
||||
$response['data'][] = $row;
|
||||
}
|
||||
} else {
|
||||
$response['data'][] = $row;
|
||||
}
|
||||
}
|
||||
|
||||
return $response;
|
||||
|
||||
} catch (Exception $error) {
|
||||
throw $error;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user