Merged in bugfix/PMC-780 (pull request #7074)

PMC-780

Approved-by: Paula Quispe <paula.quispe@processmaker.com>
Approved-by: Julio Cesar Laura Avendaño <contact@julio-laura.com>
This commit is contained in:
Julio Cesar Laura Avendaño
2019-09-12 18:48:25 +00:00
8 changed files with 173 additions and 0 deletions

View File

@@ -0,0 +1,17 @@
<?php
/**
* Model factory for a role
*/
use Faker\Generator as Faker;
$factory->define(\ProcessMaker\Model\RbacRoles::class, function(Faker $faker) {
return [
'ROL_UID' => G::generateUniqueID(),
'ROL_PARENT' => '', // This value is empty because actually don't exists this type of relations between roles
'ROL_SYSTEM' => '00000000000000000000000000000002', // Hardcoded value, this value refers to ProcessMaker
'ROL_CODE' => strtoupper($faker->word),
'ROL_CREATE_DATE' => $faker->date('Y-m-d H:i:s', 'now'),
'ROL_UPDATE_DATE' => $faker->date('Y-m-d H:i:s', 'now'),
'ROL_STATUS' => $faker->randomElement([0, 1])
];
});

View File

@@ -0,0 +1,46 @@
<?php
use Faker\Generator as Faker;
$factory->define(\ProcessMaker\Model\RbacUsers::class, function (Faker $faker) {
return [
'USR_UID' => G::generateUniqueID(),
'USR_USERNAME' => $faker->unique()->userName,
'USR_PASSWORD' => $faker->password,
'USR_FIRSTNAME' => $faker->firstName,
'USR_LASTNAME' => $faker->lastName,
'USR_EMAIL' => $faker->unique()->email,
'USR_DUE_DATE' => $faker->dateTimeInInterval('now', '+1 year')->format('Y-m-d H:i:s'),
'USR_CREATE_DATE' => $faker->date('Y-m-d H:i:s', 'now'),
'USR_UPDATE_DATE' => $faker->date('Y-m-d H:i:s', 'now'),
'USR_STATUS' => $faker->randomElement([0, 1]),
'USR_AUTH_TYPE' => 'MYSQL', // Authentication type, by default is MySQL
'UID_AUTH_SOURCE' => '00000000000000000000000000000000', // When the type is "MYSQL" the value for this field is this...
'USR_AUTH_USER_DN' => '', // Don't required for now
'USR_AUTH_SUPERVISOR_DN' => '' // Don't required for now
];
});
// Create a deleted user
$factory->state(\ProcessMaker\Model\RbacUsers::class, 'deleted', function () {
return [
'USR_USERNAME' => '',
'USR_STATUS' => 0,
'USR_AUTH_TYPE' => '',
'UID_AUTH_SOURCE' => ''
];
});
// Create an active user
$factory->state(\ProcessMaker\Model\RbacUsers::class, 'active', function () {
return [
'USR_STATUS' => 1
];
});
// Create an inactive user
$factory->state(\ProcessMaker\Model\RbacUsers::class, 'inactive', function () {
return [
'USR_STATUS' => 0
];
});

View File

@@ -0,0 +1,17 @@
<?php
/**
* Model factory for a role assigned to an user
*/
$factory->define(\ProcessMaker\Model\RbacUsersRoles::class, function() {
return [
'USR_UID' => function() {
$rbacUser = factory(\ProcessMaker\Model\RbacUsers::class)->create();
return $rbacUser->USR_UID;
},
'ROL_UID' => function() {
$rbacRole = factory(\ProcessMaker\Model\RbacRoles::class)->create();
return $rbacRole->ROL_UID;
}
];
});

View File

@@ -873,6 +873,8 @@ class Roles extends BaseRoles
$criteria->addSelectColumn(RbacUsersPeer::USR_UID);
$criteria->add(RolesPeer::ROL_UID, '', Criteria::NOT_EQUAL);
$criteria->add(RolesPeer::ROL_UID, $rolUid);
// If the username is empty, the user was deleted in the application
$criteria->add(RbacUsersPeer::USR_USERNAME, '', Criteria::NOT_EQUAL);
$criteria->addJoin(RolesPeer::ROL_UID, UsersRolesPeer::ROL_UID);
$criteria->addJoin(UsersRolesPeer::USR_UID, RbacUsersPeer::USR_UID);

View File

@@ -0,0 +1,55 @@
<?php
namespace Tests\unit\rbac\engine\classes\model;
use ProcessMaker\Model\RbacRoles;
use ProcessMaker\Model\RbacUsers;
use ProcessMaker\Model\RbacUsersRoles;
use Roles;
use Tests\TestCase;
class RolesTest extends TestCase
{
/**
* Test the method "numUsersWithRole" with users with different statuses
*
* @test
*
* @covers Roles::numUsersWithRole()
*/
public function it_should_count_correctly_the_users_with_a_role_assigned()
{
// Instance the class with the method to test
$rolesInstance = new Roles();
// Create elements
$role = factory(RbacRoles::class)->create();
$deletedUser = factory(RbacUsers::class)->states('deleted')->create();
$activeUser = factory(RbacUsers::class)->states('active')->create();
$inactiveUser = factory(RbacUsers::class)->states('inactive')->create();
// Assign the role to a deleted user
factory(RbacUsersRoles::class)->create([
'ROL_UID' => $role->ROL_UID,
'USR_UID' => $deletedUser->USR_UID
]);
// Should be 0, because a deleted user should not be considered
$this->assertEquals(0, $rolesInstance->numUsersWithRole($role->ROL_UID));
// Assign the role to an active user
factory(RbacUsersRoles::class)->create([
'ROL_UID' => $role->ROL_UID,
'USR_UID' => $activeUser->USR_UID
]);
// Should be 1, because only the active user should be considered
$this->assertEquals(1, $rolesInstance->numUsersWithRole($role->ROL_UID));
// Assign the role to an inactive user
factory(RbacUsersRoles::class)->create([
'ROL_UID' => $role->ROL_UID,
'USR_UID' => $inactiveUser->USR_UID
]);
// Should be 2, because only the active and the inactive users should be considered
$this->assertEquals(2, $rolesInstance->numUsersWithRole($role->ROL_UID));
}
}

View File

@@ -0,0 +1,12 @@
<?php
namespace ProcessMaker\Model;
use Illuminate\Database\Eloquent\Model;
class RbacRoles extends Model
{
protected $table = 'RBAC_ROLES';
public $timestamps = false;
}

View File

@@ -0,0 +1,12 @@
<?php
namespace ProcessMaker\Model;
use Illuminate\Database\Eloquent\Model;
class RbacUsers extends Model
{
protected $table = 'RBAC_USERS';
public $timestamps = false;
}

View File

@@ -0,0 +1,12 @@
<?php
namespace ProcessMaker\Model;
use Illuminate\Database\Eloquent\Model;
class RbacUsersRoles extends Model
{
protected $table = 'RBAC_USERS_ROLES';
public $timestamps = false;
}