mirror of
https://github.com/johndoe6345789/metabuilder.git
synced 2026-04-25 06:14:59 +00:00
- Created package.json for ui_pages with dependencies and exports. - Added roles.json for access permissions related to UI pages. - Implemented functions.json for managing UI pages and routing. - Developed stories.json for Storybook showcasing UI pages components. - Defined styles tokens for UI pages including colors, spacing, and typography. feat(ui_permissions): Introduce UI Permissions package for access control - Created package.json for ui_permissions with permission utilities. - Added roles.json defining permissions for a 6-level access control system. - Implemented functions.json for permission checking and level management. - Developed stories.json for Storybook showcasing permission-related components. - Defined styles tokens for UI permissions including colors and spacing.
227 lines
6.5 KiB
JSON
227 lines
6.5 KiB
JSON
{
|
|
"$schema": "https://metabuilder.dev/schemas/json-script-components.schema.json",
|
|
"schemaVersion": "2.0.0",
|
|
"package": "ui_permissions",
|
|
"description": "Permission-related UI components for access control display",
|
|
"components": [
|
|
{
|
|
"id": "permission_badge",
|
|
"name": "PermissionBadge",
|
|
"description": "Badge displaying user permission level with color coding",
|
|
"props": [
|
|
{
|
|
"name": "level",
|
|
"type": "number",
|
|
"required": true,
|
|
"description": "Permission level (1-6)"
|
|
},
|
|
{
|
|
"name": "showLabel",
|
|
"type": "boolean",
|
|
"required": false,
|
|
"default": true,
|
|
"description": "Whether to show level name label"
|
|
},
|
|
{
|
|
"name": "size",
|
|
"type": "string",
|
|
"required": false,
|
|
"default": "medium",
|
|
"description": "Badge size: small, medium, large"
|
|
}
|
|
],
|
|
"render": {
|
|
"type": "element",
|
|
"template": {
|
|
"type": "Chip",
|
|
"className": "permission-badge",
|
|
"size": "{{size}}",
|
|
"color": "{{level >= 5 ? 'error' : level >= 4 ? 'warning' : level >= 3 ? 'info' : 'default'}}",
|
|
"variant": "filled",
|
|
"label": "{{showLabel ? (level === 6 ? 'Supergod' : level === 5 ? 'God' : level === 4 ? 'Admin' : level === 3 ? 'Moderator' : level === 2 ? 'User' : 'Public') : level}}"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "permission_gate",
|
|
"name": "PermissionGate",
|
|
"description": "Conditional wrapper that shows children only if user has required permission level",
|
|
"props": [
|
|
{
|
|
"name": "requiredLevel",
|
|
"type": "number",
|
|
"required": true,
|
|
"description": "Minimum permission level required (1-6)"
|
|
},
|
|
{
|
|
"name": "userLevel",
|
|
"type": "number",
|
|
"required": true,
|
|
"description": "Current user's permission level"
|
|
},
|
|
{
|
|
"name": "children",
|
|
"type": "any",
|
|
"required": true,
|
|
"description": "Content to render if authorized"
|
|
},
|
|
{
|
|
"name": "fallback",
|
|
"type": "any",
|
|
"required": false,
|
|
"description": "Content to render if not authorized"
|
|
}
|
|
],
|
|
"render": {
|
|
"type": "conditional",
|
|
"condition": "{{userLevel >= requiredLevel}}",
|
|
"then": {
|
|
"type": "Fragment",
|
|
"children": "{{children}}"
|
|
},
|
|
"else": {
|
|
"type": "conditional",
|
|
"condition": "{{fallback}}",
|
|
"then": "{{fallback}}",
|
|
"else": null
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "permission_level_selector",
|
|
"name": "PermissionLevelSelector",
|
|
"description": "Dropdown selector for choosing permission levels",
|
|
"props": [
|
|
{
|
|
"name": "value",
|
|
"type": "number",
|
|
"required": true,
|
|
"description": "Currently selected level"
|
|
},
|
|
{
|
|
"name": "onChange",
|
|
"type": "function",
|
|
"required": true,
|
|
"description": "Callback when level changes"
|
|
},
|
|
{
|
|
"name": "minLevel",
|
|
"type": "number",
|
|
"required": false,
|
|
"default": 1,
|
|
"description": "Minimum selectable level"
|
|
},
|
|
{
|
|
"name": "maxLevel",
|
|
"type": "number",
|
|
"required": false,
|
|
"default": 6,
|
|
"description": "Maximum selectable level"
|
|
},
|
|
{
|
|
"name": "disabled",
|
|
"type": "boolean",
|
|
"required": false,
|
|
"default": false
|
|
}
|
|
],
|
|
"render": {
|
|
"type": "element",
|
|
"template": {
|
|
"type": "Select",
|
|
"className": "permission-level-selector",
|
|
"value": "{{value}}",
|
|
"onChange": "{{onChange}}",
|
|
"disabled": "{{disabled}}",
|
|
"fullWidth": true,
|
|
"children": [
|
|
{
|
|
"type": "MenuItem",
|
|
"value": 1,
|
|
"disabled": "{{minLevel > 1}}",
|
|
"children": "Public (Level 1)"
|
|
},
|
|
{
|
|
"type": "MenuItem",
|
|
"value": 2,
|
|
"disabled": "{{minLevel > 2 || maxLevel < 2}}",
|
|
"children": "User (Level 2)"
|
|
},
|
|
{
|
|
"type": "MenuItem",
|
|
"value": 3,
|
|
"disabled": "{{minLevel > 3 || maxLevel < 3}}",
|
|
"children": "Moderator (Level 3)"
|
|
},
|
|
{
|
|
"type": "MenuItem",
|
|
"value": 4,
|
|
"disabled": "{{minLevel > 4 || maxLevel < 4}}",
|
|
"children": "Admin (Level 4)"
|
|
},
|
|
{
|
|
"type": "MenuItem",
|
|
"value": 5,
|
|
"disabled": "{{minLevel > 5 || maxLevel < 5}}",
|
|
"children": "God (Level 5)"
|
|
},
|
|
{
|
|
"type": "MenuItem",
|
|
"value": 6,
|
|
"disabled": "{{maxLevel < 6}}",
|
|
"children": "Supergod (Level 6)"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "access_denied",
|
|
"name": "AccessDenied",
|
|
"description": "Access denied message component",
|
|
"props": [
|
|
{
|
|
"name": "requiredLevel",
|
|
"type": "number",
|
|
"required": false,
|
|
"description": "The level required for access"
|
|
},
|
|
{
|
|
"name": "message",
|
|
"type": "string",
|
|
"required": false,
|
|
"default": "You do not have permission to access this resource."
|
|
}
|
|
],
|
|
"render": {
|
|
"type": "element",
|
|
"template": {
|
|
"type": "Alert",
|
|
"severity": "error",
|
|
"className": "access-denied",
|
|
"children": [
|
|
{
|
|
"type": "AlertTitle",
|
|
"children": "Access Denied"
|
|
},
|
|
{
|
|
"type": "Text",
|
|
"children": "{{message}}"
|
|
},
|
|
{
|
|
"type": "conditional",
|
|
"condition": "{{requiredLevel}}",
|
|
"then": {
|
|
"type": "Text",
|
|
"variant": "caption",
|
|
"sx": { "mt": 1, "display": "block" },
|
|
"children": "Required level: {{requiredLevel === 6 ? 'Supergod' : requiredLevel === 5 ? 'God' : requiredLevel === 4 ? 'Admin' : requiredLevel === 3 ? 'Moderator' : requiredLevel === 2 ? 'User' : 'Public'}}"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}
|