Skip to content

Commit 664cc85

Browse files
author
Nur Alam
committed
custom permission bug fixed
1 parent ca4bb96 commit 664cc85

File tree

4 files changed

+83
-102
lines changed

4 files changed

+83
-102
lines changed

src/Permissions.php

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33

44
namespace RadiateCode\PermissionNameGenerator;
55

6+
use Illuminate\Support\Str;
67
use Illuminate\Support\Facades\Cache;
78
use RadiateCode\PermissionNameGenerator\Enums\Constant;
8-
use RadiateCode\PermissionNameGenerator\Services\ResourcePermissionGenerator;
9+
use RadiateCode\PermissionNameGenerator\Services\GeneratePermissionTitle;
910
use RadiateCode\PermissionNameGenerator\Services\RoutePermissionGenerator;
11+
use RadiateCode\PermissionNameGenerator\Services\ResourcePermissionGenerator;
1012

1113
class Permissions
1214
{
@@ -63,6 +65,10 @@ public function fromRoutes()
6365
public function get(): array
6466
{
6567
if (!$this->hasCachedPermissions()) {
68+
ksort($this->permissions);
69+
70+
$this->sectionPermissions();
71+
6672
return $this->permissions;
6773
}
6874

@@ -104,6 +110,45 @@ protected function customPermissions(): Permissions
104110
return $this;
105111
}
106112

113+
protected function sectionPermissions()
114+
{
115+
$permissionsSection = config('permission-generator.permissions-section');
116+
117+
if (empty($permissionsSection)) {
118+
return $this;
119+
}
120+
121+
$sectionWisePermissions = [];
122+
123+
foreach ($permissionsSection as $section => $permissions) {
124+
foreach ($permissions as $permissionsTitle) {
125+
// check is the permissions title is key or class
126+
if (class_exists($permissionsTitle)) {
127+
$permissionsTitleClassInstance = app("\\" . $permissionsTitle);
128+
129+
$title = GeneratePermissionTitle::execute($permissionsTitleClassInstance);
130+
131+
$permissionsTitle = strtolower(Str::slug($title, "-"));
132+
}
133+
134+
if (array_key_exists($permissionsTitle, $this->permissions)) {
135+
$sectionWisePermissions[$section]['section'] = str_replace(['\'', '/', '"', ',', ';', '<', '>', '.', '_', '-', ':'], ' ', $section);
136+
$sectionWisePermissions[$section]['permissions'][$permissionsTitle] = $this->permissions[$permissionsTitle];
137+
138+
unset($this->permissions[$permissionsTitle]);
139+
}
140+
}
141+
142+
if (!empty($sectionWisePermissions)) {
143+
ksort($sectionWisePermissions[$section]['permissions']);
144+
}
145+
}
146+
147+
$this->permissions = array_merge($sectionWisePermissions, $this->permissions);
148+
149+
return $this;
150+
}
151+
107152
protected function hasCachedPermissions(): bool
108153
{
109154
return config('permission-generator.cache-permissions')
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?php
2+
3+
namespace RadiateCode\PermissionNameGenerator\Services;
4+
5+
use Illuminate\Support\Str;
6+
use RadiateCode\PermissionNameGenerator\Contracts\WithPermissionGenerator;
7+
8+
class GeneratePermissionTitle
9+
{
10+
public static function execute($controllerInstance)
11+
{
12+
// if the controller use the WithPermissible interface then get the title
13+
if ($controllerInstance instanceof WithPermissionGenerator) {
14+
$title = $controllerInstance->getPermissionsTitle();
15+
16+
if (!empty($title)) {
17+
return $title;
18+
}
19+
}
20+
21+
// Or, generate permission title from controller name
22+
$controllerName = class_basename($controllerInstance);
23+
24+
// place white space between controller (PascalCase) name
25+
$name = preg_replace('/([a-z])([A-Z])/s', '$1 $2', $controllerName);
26+
27+
if (Str::contains($controllerName, 'Controller')) {
28+
return str_replace('Controller', 'Permissions', $name);
29+
}
30+
31+
return $name . ' Permissions';
32+
}
33+
}

src/Services/ResourcePermissionGenerator.php

Lines changed: 1 addition & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -54,41 +54,9 @@ public function generate()
5454
}
5555
}
5656

57-
ksort($resourcePermissions);
58-
5957
return [
60-
'permissions' => $this->sectionPermissions($resourcePermissions),
58+
'permissions' => $resourcePermissions,
6159
'only_permission_names' => $onlyPermissionNames
6260
];
6361
}
64-
65-
protected function sectionPermissions($generatedPermissions)
66-
{
67-
$permissionsSection = config('permission-generator.permissions-section');
68-
69-
if (empty($permissionsSection)) {
70-
return $generatedPermissions;
71-
}
72-
73-
$sectionWisePermissions = [];
74-
75-
foreach ($permissionsSection as $section => $permissions) {
76-
foreach ($permissions as $permissionsTitleKey) {
77-
if (array_key_exists($permissionsTitleKey, $generatedPermissions)) {
78-
$sectionWisePermissions[$section]['section'] = str_replace(['\'', '/', '"', ',', ';', '<', '>', '.', '_', '-', ':'], ' ', $section);
79-
$sectionWisePermissions[$section]['permissions'][$permissionsTitleKey] = $generatedPermissions[$permissionsTitleKey];
80-
81-
unset($generatedPermissions[$permissionsTitleKey]);
82-
}
83-
}
84-
85-
if (!empty($sectionWisePermissions)) {
86-
ksort($sectionWisePermissions[$section]['permissions']);
87-
}
88-
}
89-
90-
$generatedPermissions = array_merge($sectionWisePermissions, $generatedPermissions);
91-
92-
return $generatedPermissions;
93-
}
9462
}

src/Services/RoutePermissionGenerator.php

Lines changed: 3 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -85,59 +85,18 @@ public function generate()
8585
$onlyPermissionNames[] = $routeName;
8686
}
8787

88-
ksort($permissions);
89-
9088
return [
91-
'permissions' => $this->sectionPermissions($permissions),
89+
'permissions' => $permissions,
9290
'only_permission_names' => $onlyPermissionNames
9391
];
9492
}
9593

96-
protected function sectionPermissions($generatedPermissions)
97-
{
98-
$permissionsSection = config('permission-generator.permissions-section');
99-
100-
if (empty($permissionsSection)) {
101-
return $generatedPermissions;
102-
}
103-
104-
$sectionWisePermissions = [];
105-
106-
foreach ($permissionsSection as $section => $permissions) {
107-
foreach ($permissions as $permissionsTitle) {
108-
// check is the permissions title is key or class
109-
if (class_exists($permissionsTitle)) {
110-
$permissionsTitleClassInstance = app("\\" . $permissionsTitle);
111-
112-
$title = $this->generatePermissionTitle($permissionsTitleClassInstance);
113-
114-
$permissionsTitle = strtolower(Str::slug($title, "-"));
115-
}
116-
117-
if (array_key_exists($permissionsTitle, $generatedPermissions)) {
118-
$sectionWisePermissions[$section]['section'] = str_replace(['\'', '/', '"', ',', ';', '<', '>', '.', '_', '-', ':'], ' ', $section);
119-
$sectionWisePermissions[$section]['permissions'][$permissionsTitle] = $generatedPermissions[$permissionsTitle];
120-
121-
unset($generatedPermissions[$permissionsTitle]);
122-
}
123-
}
124-
125-
if (!empty($sectionWisePermissions)) {
126-
ksort($sectionWisePermissions[$section]['permissions']);
127-
}
128-
}
129-
130-
$generatedPermissions = array_merge($sectionWisePermissions, $generatedPermissions);
131-
132-
return $generatedPermissions;
133-
}
134-
13594
protected function generateKey($controllerInstance)
13695
{
13796
$key = $this->appendPermissionKey($controllerInstance);
13897

13998
if (empty($key)) {
140-
$title = $this->generatePermissionTitle($controllerInstance);
99+
$title = GeneratePermissionTitle::execute($controllerInstance);
141100

142101
return strtolower(Str::slug($title, "-"));
143102
}
@@ -154,7 +113,7 @@ protected function appendPermissionKey($currentControllerInstance)
154113
if (!empty($appendTo) && class_exists($appendTo)) {
155114
$appendControllerClass = app("\\" . $appendTo);
156115

157-
$title = $this->generatePermissionTitle($appendControllerClass);
116+
$title = GeneratePermissionTitle::execute($appendControllerClass);
158117

159118
return strtolower(Str::slug($title, "-"));
160119
}
@@ -165,30 +124,6 @@ protected function appendPermissionKey($currentControllerInstance)
165124
return '';
166125
}
167126

168-
protected function generatePermissionTitle($controllerInstance)
169-
{
170-
// if the controller use the WithPermissible interface then get the title
171-
if ($controllerInstance instanceof WithPermissionGenerator) {
172-
$title = $controllerInstance->getPermissionsTitle();
173-
174-
if (!empty($title)) {
175-
return $title;
176-
}
177-
}
178-
179-
// Or, generate permission title from controller name
180-
$controllerName = class_basename($controllerInstance);
181-
182-
// place white space between controller (PascalCase) name
183-
$name = preg_replace('/([a-z])([A-Z])/s', '$1 $2', $controllerName);
184-
185-
if (Str::contains($controllerName, 'Controller')) {
186-
return str_replace('Controller', 'Permissions', $name);
187-
}
188-
189-
return $name . ' Permissions';
190-
}
191-
192127
protected function isExcludedController($controller): bool
193128
{
194129
foreach ($this->globalExcludeControllers as $prefix) {

0 commit comments

Comments
 (0)