user token permission configurable

This commit is contained in:
xiaomlove
2025-05-02 23:27:16 +07:00
parent 7ef23bcc6b
commit 43b241d617
7 changed files with 61 additions and 9 deletions
@@ -14,6 +14,7 @@ use Filament\Facades\Filament;
use Filament\Resources\Pages\Page;
use Filament\Forms;
use Illuminate\Support\HtmlString;
use Nexus\Database\NexusDB;
class EditSetting extends Page implements Forms\Contracts\HasForms
{
@@ -85,11 +86,22 @@ class EditSetting extends Page implements Forms\Contracts\HasForms
}
}
Setting::query()->upsert($data, ['name'], ['value']);
$this->doAfterUpdate();
do_action("nexus_setting_update");
clear_setting_cache();
send_admin_success_notification();
}
/**
* this actions get config must not use cache !!!
*
* @return void
*/
private function doAfterUpdate(): void
{
Setting::updateUserTokenPermissionAllowedCache();
}
private function getTabs(): array
{
$tabs = [];
+4 -1
View File
@@ -3,6 +3,8 @@
namespace App\Http\Controllers;
use App\Models\PluginStore;
use App\Models\Setting;
use App\Repositories\TokenRepository;
use App\Repositories\ToolRepository;
use App\Repositories\UploadRepository;
use Illuminate\Http\Request;
@@ -33,7 +35,8 @@ class ToolController extends Controller
public function test(Request $request)
{
$result = ['id' => 1];
$result['logFile'] = getLogFile();
$result['permissions'] = TokenRepository::listUserTokenPermissionAllowed();
// $result['permissions'] = Setting::getPermissionUserTokenAllowed();
$resource = new JsonResource($result);
return $this->success($resource);
}
+19
View File
@@ -19,6 +19,7 @@ class Setting extends NexusModel
const ROLE_PERMISSION_CACHE_KEY_PREFIX = 'nexus_role_permissions_';
const TORRENT_GLOBAL_STATE_CACHE_KEY = 'global_promotion_state';
const USER_TOKEN_PERMISSION_ALLOWED_CACHE_KRY = 'user_token_permission_allowed';
/**
* get setting autoload = yes with cache
@@ -100,6 +101,18 @@ class Setting extends NexusModel
return $value;
}
public static function updateUserTokenPermissionAllowedCache(): void
{
$redis = NexusDB::redis();
$key = self::USER_TOKEN_PERMISSION_ALLOWED_CACHE_KRY;
$redis->del($key);
//must not use cache
$allowed = self::getFromDb("permission.user_token_allowed");
if (!empty($allowed)) {
$redis->sAdd($key, ...$allowed);
}
}
public static function getDefaultLang(): string
{
return self::get("main.defaultlang");
@@ -223,4 +236,10 @@ class Setting extends NexusModel
return self::get("smtp.smtptype");
}
public static function getPermissionUserTokenAllowed(): array
{
return self::get("permission.user_token_allowed");
}
}
+7
View File
@@ -615,6 +615,13 @@ class User extends Authenticatable implements FilamentUser, HasName
return is_null($this->original['notifs']) || str_contains($this->notifs, "[{$name}]");
}
public function tokenCan(string $ability)
{
$redis = NexusDB::redis();
return $redis->sismember(Setting::USER_TOKEN_PERMISSION_ALLOWED_CACHE_KRY, $ability)
&& $this->accessToken && $this->accessToken->can($ability);
}
+17 -6
View File
@@ -2,21 +2,32 @@
namespace App\Repositories;
use App\Enums\Permission\RoutePermissionEnum;
use App\Models\Setting;
class TokenRepository extends BaseRepository
{
private static array $userTokenPermissions = [
RoutePermissionEnum::TORRENT_LIST,
RoutePermissionEnum::TORRENT_VIEW,
RoutePermissionEnum::TORRENT_UPLOAD,
RoutePermissionEnum::USER_VIEW,
RoutePermissionEnum::TORRENT_LIST->value,
RoutePermissionEnum::TORRENT_VIEW->value,
RoutePermissionEnum::TORRENT_UPLOAD->value,
RoutePermissionEnum::USER_VIEW->value,
];
public static function listUserTokenPermissions(): array
{
return self::formatPermissions(self::$userTokenPermissions);
}
public static function listUserTokenPermissionAllowed(): array
{
return self::formatPermissions(Setting::getPermissionUserTokenAllowed());
}
private static function formatPermissions(array $permissions): array
{
$result = [];
foreach (self::$userTokenPermissions as $permission) {
$result[$permission->value] = nexus_trans("route-permission.{$permission->value}.text");
foreach ($permissions as $permission) {
$result[$permission] = nexus_trans("route-permission.{$permission}.text");
}
return $result;
}
+1 -1
View File
@@ -1128,7 +1128,7 @@ JS;
//end seed box
//token start
$permissions = \App\Repositories\TokenRepository::listUserTokenPermissions();
$permissions = \App\Repositories\TokenRepository::listUserTokenPermissionAllowed();
$permissionOptions = [];
foreach ($permissions as $name => $label) {
$permissionOptions[] = sprintf('<label><input type="checkbox" name="permissions[]" value="%s">%s</label>', $name, $label);
+1 -1
View File
@@ -30,7 +30,7 @@ $userRep = new \App\Repositories\UserRepository();
if ($user['added'] == "0000-00-00 00:00:00" || $user['added'] == null) {
$joindate = $lang_userdetails['text_not_available'];
} else {
$weeks = abs($userInfo->added->diffInWeeks()) . nexus_trans('nexus.time_units.week');
$weeks = abs(number_format($userInfo->added->diffInWeeks(), 1)) . nexus_trans('nexus.time_units.week');
$joindate = $user['added']." (" . gettime($user["added"], true, false, true).", $weeks)";
}
$lastseen = $user["last_access"];