Skip to content

Commit 8a4cbb2

Browse files
committed
feat(admin-roles): add HWID policy inheritance and update role terminology
- Update role terminology from "built-in role" to "owner role" in all locale files (en, fa, ru, zh) - Add HWID policy configuration with inheritance support for admin roles - Add new locale strings: inherit, hwidPolicy, hwidPolicyHint, hwidEnabledDescription - Update admin role form to distinguish between protected and read-only roles - Refactor admin role actions menu to use isReadOnlyRole instead of isProtectedRole - Update admin role modal and form components to support HWID policy settings - Add HWID policy field to admin role API schema and service layer - Improve role permission UI to display HWID policy status alongside other role configurations
1 parent 29e72e6 commit 8a4cbb2

9 files changed

Lines changed: 208 additions & 43 deletions

File tree

dashboard/public/statics/locales/en.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -746,7 +746,7 @@
746746
"createRole": "Create role",
747747
"editRole": "Edit role",
748748
"viewRole": "View role",
749-
"readOnlyHint": "This is a built-in role. You can review its configuration but cannot modify it.",
749+
"readOnlyHint": "This is the owner role. You can review its configuration but cannot modify it.",
750750
"modalDescription": "Configure permissions, limits, features and access for this role.",
751751
"currentRoleUnavailable": "Current role unavailable",
752752
"loadFallback": "Using built-in roles",
@@ -767,6 +767,10 @@
767767
"permissionCount": "{{count}} permissions",
768768
"limitFeatureCount": "{{limits}} limits, {{features}} feature flags",
769769
"unlimited": "Unlimited",
770+
"inherit": "Inherit",
771+
"hwidPolicy": "HWID policy",
772+
"hwidPolicyHint": "When enabled, empty limits inherit the global HWID settings. Turn it off to disable HWID checks for admins with this role.",
773+
"hwidEnabledDescription": "Apply HWID registration and limits to users created or modified by this role.",
770774
"empty": "No roles",
771775
"emptyDescription": "Create a role to assign granular permissions, limits, features, and access restrictions to admins.",
772776
"noSearchResults": "No roles match your search.",

dashboard/public/statics/locales/fa.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -613,7 +613,7 @@
613613
"createRole": "ایجاد نقش",
614614
"editRole": "ویرایش نقش",
615615
"viewRole": "مشاهده نقش",
616-
"readOnlyHint": "این یک نقش داخلی است. می‌توانید پیکربندی آن را مشاهده کنید اما قابل ویرایش نیست.",
616+
"readOnlyHint": "این نقش مالک است. می‌توانید پیکربندی آن را مشاهده کنید اما قابل ویرایش نیست.",
617617
"modalDescription": "مجوزها، محدودیت‌ها، قابلیت‌ها و دسترسی‌های این نقش را پیکربندی کنید.",
618618
"currentRoleUnavailable": "نقش فعلی در دسترس نیست",
619619
"loadFallback": "استفاده از نقش‌های داخلی",
@@ -634,6 +634,10 @@
634634
"permissionCount": "{{count}} مجوز",
635635
"limitFeatureCount": "{{limits}} محدودیت، {{features}} پرچم قابلیت",
636636
"unlimited": "نامحدود",
637+
"inherit": "ارث‌بری",
638+
"hwidPolicy": "سیاست HWID",
639+
"hwidPolicyHint": "وقتی فعال باشد، محدودیت‌های خالی از تنظیمات سراسری HWID ارث‌بری می‌کنند. برای غیرفعال کردن بررسی HWID برای مدیران این نقش، آن را خاموش کنید.",
640+
"hwidEnabledDescription": "ثبت HWID و محدودیت‌ها را برای کاربرانی که با این نقش ایجاد یا ویرایش می‌شوند اعمال می‌کند.",
637641
"empty": "نقشی وجود ندارد",
638642
"emptyDescription": "نقش جدیدی بسازید تا مجوزها، محدودیت‌ها، قابلیت‌ها و دسترسی‌های دقیق به مدیران اختصاص دهید.",
639643
"noSearchResults": "نقشی با جستجوی شما مطابقت ندارد.",

dashboard/public/statics/locales/ru.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -732,7 +732,7 @@
732732
"createRole": "Создать роль",
733733
"editRole": "Изменить роль",
734734
"viewRole": "Просмотр роли",
735-
"readOnlyHint": "Это встроенная роль. Вы можете просмотреть её настройки, но не можете изменить.",
735+
"readOnlyHint": "Это роль владельца. Вы можете просмотреть её настройки, но не можете изменить.",
736736
"modalDescription": "Настройте права, лимиты, функции и доступ для этой роли.",
737737
"currentRoleUnavailable": "Текущая роль недоступна",
738738
"loadFallback": "Используются встроенные роли",
@@ -753,6 +753,10 @@
753753
"permissionCount": "{{count}} прав",
754754
"limitFeatureCount": "{{limits}} лимитов, {{features}} флагов функций",
755755
"unlimited": "Без ограничений",
756+
"inherit": "Наследовать",
757+
"hwidPolicy": "Политика HWID",
758+
"hwidPolicyHint": "Если включено, пустые лимиты наследуют глобальные настройки HWID. Отключите, чтобы выключить проверки HWID для администраторов с этой ролью.",
759+
"hwidEnabledDescription": "Применять регистрацию HWID и лимиты к пользователям, созданным или измененным этой ролью.",
756760
"empty": "Ролей нет",
757761
"emptyDescription": "Создайте роль, чтобы назначать админам детальные права, лимиты, функции и ограничения доступа.",
758762
"noSearchResults": "Нет ролей по вашему запросу.",

dashboard/public/statics/locales/zh.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -746,7 +746,7 @@
746746
"createRole": "创建角色",
747747
"editRole": "编辑角色",
748748
"viewRole": "查看角色",
749-
"readOnlyHint": "这是内置角色。您可以查看其配置,但无法修改。",
749+
"readOnlyHint": "这是所有者角色。您可以查看其配置,但无法修改。",
750750
"modalDescription": "为此角色配置权限、限制、功能和访问。",
751751
"currentRoleUnavailable": "当前角色不可用",
752752
"loadFallback": "使用内置角色",
@@ -767,6 +767,10 @@
767767
"permissionCount": "{{count}} 项权限",
768768
"limitFeatureCount": "{{limits}} 个限制,{{features}} 个功能标记",
769769
"unlimited": "无限制",
770+
"inherit": "继承",
771+
"hwidPolicy": "HWID 策略",
772+
"hwidPolicyHint": "启用后,空限制会继承全局 HWID 设置。关闭后,此角色的管理员将不进行 HWID 检查。",
773+
"hwidEnabledDescription": "将 HWID 注册和限制应用于由此角色创建或修改的用户。",
770774
"empty": "暂无角色",
771775
"emptyDescription": "创建角色以为管理员分配精细的权限、限制、功能和访问限制。",
772776
"noSearchResults": "没有匹配的角色。",

dashboard/src/features/admin-roles/components/admin-role-actions-menu.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { cn } from '@/lib/utils'
1212
import { queryClient } from '@/utils/query-client'
1313
import { AdminRoleResponse, getGetRolesQueryKey, getGetRolesSimpleQueryKey, useDeleteRole } from '@/service/api'
1414

15-
import { isProtectedRole } from '@/features/admin-roles/forms/admin-role-form'
15+
import { isProtectedRole, isReadOnlyRole } from '@/features/admin-roles/forms/admin-role-form'
1616

1717
interface AdminRoleActionsMenuProps {
1818
role: AdminRoleResponse
@@ -26,6 +26,7 @@ export default function AdminRoleActionsMenu({ role, onEdit, className }: AdminR
2626
const [isDeleteDialogOpen, setDeleteDialogOpen] = useState(false)
2727
const deleteRole = useDeleteRole()
2828
const protectedRole = isProtectedRole(role)
29+
const readOnlyRole = isReadOnlyRole(role)
2930

3031
const handleDeleteClick = (event: Event) => {
3132
event.stopPropagation()
@@ -66,13 +67,13 @@ export default function AdminRoleActionsMenu({ role, onEdit, className }: AdminR
6667
onEdit(role)
6768
}}
6869
>
69-
{protectedRole ? (
70+
{readOnlyRole ? (
7071
<Eye className={cn('h-4 w-4 shrink-0', dir === 'rtl' ? 'ml-2' : 'mr-2')} />
7172
) : (
7273
<Pencil className={cn('h-4 w-4 shrink-0', dir === 'rtl' ? 'ml-2' : 'mr-2')} />
7374
)}
7475
<span className="min-w-0 truncate">
75-
{protectedRole ? t('view', { defaultValue: 'View' }) : t('edit', { defaultValue: 'Edit' })}
76+
{readOnlyRole ? t('view', { defaultValue: 'View' }) : t('edit', { defaultValue: 'Edit' })}
7677
</span>
7778
</DropdownMenuItem>
7879
<DropdownMenuSeparator />

dashboard/src/features/admin-roles/components/admin-roles-list.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import {
3636
adminRoleFormFromResponse,
3737
adminRoleFormSchema,
3838
isProtectedRole,
39+
isReadOnlyRole,
3940
} from '@/features/admin-roles/forms/admin-role-form'
4041
import AdminRoleCard from '@/features/admin-roles/components/admin-role-card'
4142
import { useAdminRolesListColumns } from '@/features/admin-roles/components/use-admin-roles-list-columns'
@@ -66,7 +67,7 @@ export default function AdminRolesList({ isDialogOpen, onOpenChange }: AdminRole
6667

6768
const handleEdit = (role: AdminRoleResponse) => {
6869
setEditingRole(role)
69-
setIsReadOnly(isProtectedRole(role))
70+
setIsReadOnly(isReadOnlyRole(role))
7071
form.reset(adminRoleFormFromResponse(role))
7172
onOpenChange(true)
7273
}

0 commit comments

Comments
 (0)