/** * Role Permissions Tab * Allows administrators to manage user roles and permissions */ import { useState } from "react"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { Shield, User, Eye, Edit3, Lock, CheckCircle2 } from "lucide-react"; import { Role, Permission, ROLE_PERMISSIONS, ROLE_DISPLAY_NAMES, getPermissionsForRole } from "@/lib/permissions"; import { Label } from "@/components/ui/label"; interface PermissionGroup { category: string; permissions: Permission[]; icon: React.ComponentType<{ className?: string }>; } const PERMISSION_GROUPS: PermissionGroup[] = [ { category: "Dashboard", permissions: ["dashboard.access"], icon: Eye, }, { category: "Ứng dụng", permissions: ["application.view", "application.edit", "application.verify", "application.approve"], icon: Edit3, }, { category: "Đánh giá", permissions: ["evaluation.view"], icon: CheckCircle2, }, { category: "Chat Assistant", permissions: ["chat.view", "chat.interact"], icon: User, }, { category: "Chương trình", permissions: ["curriculum.view", "curriculum.edit", "curriculum.delete"], icon: Edit3, }, { category: "Quản trị", permissions: ["admin.access", "admin.users", "admin.settings"], icon: Shield, }, { category: "Báo cáo", permissions: ["reports.view", "reports.create", "reports.edit"], icon: Edit3, }, ]; export function RolePermissionsTab() { const [selectedRole, setSelectedRole] = useState("admin"); return (
{/* Role Selection */} Quản lý Vai trò và Quyền Xem và quản lý quyền truy cập cho các vai trò trong hệ thống setSelectedRole(value as Role)}> {(["admin", "editor", "viewer"] as Role[]).map((role) => ( {ROLE_DISPLAY_NAMES[role]} ))} {(["admin", "editor", "viewer"] as Role[]).map((role) => ( ))} {/* Permission Summary */} Tổng quan Quyền So sánh quyền giữa các vai trò
{(["admin", "editor", "viewer"] as Role[]).map((role) => { const permissions = getPermissionsForRole(role); return (
{ROLE_DISPLAY_NAMES[role]}
{permissions.length} quyền
{permissions.slice(0, 5).map((perm) => ( {perm} ))} {permissions.length > 5 && ( +{permissions.length - 5} khác )}
); })}
); } function RolePermissionsView({ role }: { role: Role }) { const rolePermissions = getPermissionsForRole(role); return (

{ROLE_DISPLAY_NAMES[role]}

{rolePermissions.length} quyền được cấp

{rolePermissions.length} quyền
{PERMISSION_GROUPS.map((group) => { const groupPermissions = group.permissions.filter((perm) => rolePermissions.includes(perm) ); const hasAnyPermission = groupPermissions.length > 0; return ( {group.category}
{group.permissions.map((permission) => { const hasPermission = rolePermissions.includes(permission); return (
{hasPermission ? ( ) : ( )}
{hasPermission ? "Có" : "Không"}
); })}
); })}
); }