Skip to content

Commit

Permalink
Merge pull request #70 from AsgardCms/bugfix/user-permissions
Browse files Browse the repository at this point in the history
Fixing User permissions. If no permissions are checked, none will be …
  • Loading branch information
nWidart committed Nov 25, 2015
2 parents 92b2154 + a2d3615 commit 469605a
Show file tree
Hide file tree
Showing 3 changed files with 95 additions and 2 deletions.
22 changes: 21 additions & 1 deletion Permissions/PermissionManager.php
Expand Up @@ -63,6 +63,26 @@ protected function getState($checkedPermission)
return false;
}

return (bool) $checkedPermission;
return (bool)$checkedPermission;
}

/**
* Are all of the permissions passed of false value?
* @param array $permissions Permissions array
* @return bool
*/
public function permissionsAreAllFalse(array $permissions)
{
$uniquePermissions = array_unique($permissions);

if (count($uniquePermissions) > 1) {
return false;
}

$uniquePermission = reset($uniquePermissions);

$cleanedPermission = $this->getState($uniquePermission);

return $cleanedPermission === false;
}
}
72 changes: 72 additions & 0 deletions Tests/Permissions/PermissionManagerTest.php
@@ -0,0 +1,72 @@
<?php

namespace Modules\Core\Tests\Permissions;

use Mockery;
use Modules\Core\Permissions\PermissionManager;
use Modules\Core\Tests\BaseTestCase;
use Pingpong\Modules\Repository;

class PermissionManagerTest extends BaseTestCase
{
/**
* @test
*/
public function it_should_know_if_permissions_are_all_false()
{
$modules = $this->getModulesRepositoryMock();
$this->app->instance('modules', $modules);

$manager = new PermissionManager();

$allFalsePermissions = $manager->permissionsAreAllFalse([
'permission1' => 'false',
'permission2' => 'false',
'permission3' => 'false',
'permission4' => 'false',
]);

$mixedPermissioms = $manager->permissionsAreAllFalse([
'permission1' => 'true',
'permission2' => 'false',
'permission3' => 'false',
'permission4' => 'true',
]);

$this->assertSame(true, $allFalsePermissions);
$this->assertSame(false, $mixedPermissioms);
}

/**
* @test
*/
public function it_should_clean_permissions()
{
$input = [
'permission1' => 'true',
'permission2' => 'true',
'permission3' => 'false',
'permission4' => 'false',
'permission5' => 'true'
];

$expected = [
'permission1' => true,
'permission2' => true,
'permission3' => false,
'permission4' => false,
'permission5' => true
];

$manager = new PermissionManager();

$actual = $manager->clean($input);

$this->assertSame($expected, $actual, "The PermissionManager should clean the permissions and fix their states.");
}

protected function getModulesRepositoryMock()
{
return Mockery::mock(Repository::class);
}
}
3 changes: 2 additions & 1 deletion composer.json
Expand Up @@ -30,7 +30,8 @@
"dimsav/laravel-translatable": "~5.0",
"mcamara/laravel-localization": "~1.0",
"floatingpoint/stylist": "~0.1",
"maatwebsite/laravel-sidebar": "~2.0"
"maatwebsite/laravel-sidebar": "~2.0",
"mockery/mockery": "^0.9.4"
},
"require-dev": {
"phpunit/phpunit": "~4.0",
Expand Down

0 comments on commit 469605a

Please sign in to comment.