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:
Marco Antonio Nina Mena
2017-12-22 16:09:49 +00:00
committed by Julio Cesar Laura Avendaño
parent fbd4438ddd
commit ae28e48861
5 changed files with 371 additions and 316 deletions

View File

@@ -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

View File

@@ -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);
}
}

View File

@@ -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