Skip to content

Commit

Permalink
feat: View role system
Browse files Browse the repository at this point in the history
  • Loading branch information
dogukanoksuz committed Sep 6, 2024
1 parent a6a9327 commit 24bde45
Showing 3 changed files with 32 additions and 23 deletions.
41 changes: 27 additions & 14 deletions app/Classes/Authentication/Authenticator.php
Original file line number Diff line number Diff line change
@@ -56,11 +56,11 @@ public static function createNewToken($token, ?Request $request = null)
$defaultPermissions = config('liman.default_views');

if (auth('api')->user()->isAdmin()) {
$defaultPermissions["dashboard"][] = "auth_logs";
$defaultPermissions["dashboard"][] = "extensions";
return $defaultPermissions;
}

// TODO: Check priorities of permission values
// If something is different than default, it should be returned
$permissions = Permission::whereIn(
'morph_id',
auth('api')->user()->roles->pluck('id')->toArray()
@@ -69,20 +69,33 @@ public static function createNewToken($token, ?Request $request = null)
->where('type', 'view')
->get();

$customPermissions = $permissions->map(function ($item) {
return [
$item->key => json_decode($item->value),
];
})->toArray();

$filteredPermissions = array_filter($customPermissions, function ($permission) use ($defaultPermissions) {
return !in_array($permission, $defaultPermissions);
});

return [
$viewPermissions = [
...$defaultPermissions,
...$filteredPermissions,
];

$dashboardPermissions = [];
$permissions->map(function ($permission) use (&$dashboardPermissions, &$viewPermissions) {
if ($permission->key === "sidebar") {
// if sidebar is set to extensions, you cannot override it.
if (isset($viewPermissions["sidebar"]) && $viewPermissions["sidebar"] === "extensions") {
return;
}
$viewPermissions["sidebar"] = json_decode($permission->value);
}

if ($permission->key === "dashboard") {
// merge all dashboard permissions that comes from roles
$dashboardPermissions = array_unique([
...$dashboardPermissions,
...json_decode($permission->value),
]);
}
});

// if there is no dashboard permission, set it to default
$viewPermissions["dashboard"] = count($dashboardPermissions) > 0 ? $dashboardPermissions : $defaultPermissions["dashboard"];

return $viewPermissions;
})(),
],
],
13 changes: 5 additions & 8 deletions app/Http/Controllers/API/Settings/RoleController.php
Original file line number Diff line number Diff line change
@@ -617,22 +617,19 @@ public function views(Request $request)
// If sidebar has extensions, dashboard must have extensions
// If sidebar has servers, dashboard must have servers and extensions both

$defaultViews = config('liman.default_views');

$permissions = Permission::where([
'morph_id' => $request->role_id,
'type' => 'view',
])->get();

$viewSettings = [
...$defaultViews,
...$permissions->map(function ($item) {
return [
$item->key => json_decode($item->value),
];
})->toArray(),
...config('liman.default_views'),
];

$permissions->map(function ($item) use (&$viewSettings) {
$viewSettings[$item->key] = json_decode($item->value);
});

return response()->json($viewSettings);
}

1 change: 0 additions & 1 deletion config/liman.php
Original file line number Diff line number Diff line change
@@ -6,7 +6,6 @@
'sidebar' => 'servers',
'dashboard' => [
'servers',
'extensions',
'users',
'version',
'most_used_extensions',

0 comments on commit 24bde45

Please sign in to comment.