From d4880c491e3491be4f09fbfbc0e0a9f8b5cfb1b8 Mon Sep 17 00:00:00 2001 From: Aiman Fakhrullah Mantasan Date: Sat, 31 May 2025 16:23:01 +0800 Subject: [PATCH] Added Admin Dashboard, Access Management --- navigation/index.js | 48 ++- pages/dms/admin-dashboard.vue | 541 ++++++++++++++++++++++++++++++++++ pages/dms/check-role.vue | 127 ++++++++ pages/dms/index.vue | 155 ++++++++-- pages/dms/switch-roles.vue | 270 +++++++++++++++++ stores/dms.js | 103 ++++++- 6 files changed, 1210 insertions(+), 34 deletions(-) create mode 100644 pages/dms/admin-dashboard.vue create mode 100644 pages/dms/check-role.vue create mode 100644 pages/dms/switch-roles.vue diff --git a/navigation/index.js b/navigation/index.js index 4cfe22e..52b99f3 100644 --- a/navigation/index.js +++ b/navigation/index.js @@ -10,11 +10,55 @@ export default [ "child": [], "meta": {} }, + { + "title": "Admin Dashboard", + "path": "/dms/admin-dashboard", + "icon": "material-symbols:dashboard", + "child": [], + "meta": { + "auth": { + "role": ["admin", "superadmin"] + } + } + }, + { + "title": "Access Management", + "path": "/dms/access-management", + "icon": "ic:baseline-security", + "child": [], + "meta": { + "auth": { + "role": ["admin", "superadmin"] + } + } + }, + { + "title": "Role Management", + "path": "/dms/role-management", + "icon": "mdi:account-key", + "child": [], + "meta": { + "auth": { + "role": ["superadmin"] + } + } + }, + { + "title": "Switch Role", + "path": "/dms/switch-roles", + "icon": "ic:outline-swap-horiz", + "child": [] + }, { "title": "Settings", "path": "/dms/settings", "icon": "ic:outline-settings", - "child": [] + "child": [], + "meta": { + "auth": { + "role": ["admin", "superadmin"] + } + } } ], "meta": {} @@ -86,7 +130,7 @@ export default [ "meta": { "auth": { "role": [ - "Developer" + "superadmin" ] } } diff --git a/pages/dms/admin-dashboard.vue b/pages/dms/admin-dashboard.vue new file mode 100644 index 0000000..b1b1f4d --- /dev/null +++ b/pages/dms/admin-dashboard.vue @@ -0,0 +1,541 @@ + + + + + \ No newline at end of file diff --git a/pages/dms/check-role.vue b/pages/dms/check-role.vue new file mode 100644 index 0000000..dff13c5 --- /dev/null +++ b/pages/dms/check-role.vue @@ -0,0 +1,127 @@ + + + + + \ No newline at end of file diff --git a/pages/dms/index.vue b/pages/dms/index.vue index 93861f5..9576981 100644 --- a/pages/dms/index.vue +++ b/pages/dms/index.vue @@ -1,5 +1,9 @@ + + + + \ No newline at end of file diff --git a/stores/dms.js b/stores/dms.js index 4ce3dd4..611b7e5 100644 --- a/stores/dms.js +++ b/stores/dms.js @@ -12,10 +12,32 @@ export const useDmsStore = defineStore('dms', { id: 'user1', name: 'Aiman Fakhrullah', email: 'aiman@example.com', - role: 'engineer', // engineer, admin, manager, etc. + role: 'user', // Role can be 'superadmin', 'admin', or 'user' department: 'JKR Bahagian Kejuruteraan Awam Cawangan Kota Bharu' }, + // System roles + systemRoles: [ + { + id: 'superadmin', + name: 'Super Administrator', + description: 'Full system access with ability to manage all settings, users, and content', + color: 'purple' + }, + { + id: 'admin', + name: 'Administrator', + description: 'Administrative access to manage content and some system settings', + color: 'blue' + }, + { + id: 'user', + name: 'User', + description: 'Standard user access for viewing and interacting with content based on permissions', + color: 'green' + } + ], + // Cabinet access types cabinetAccessTypes: [ { id: 'public', name: 'Public Access', icon: 'check-circle', color: 'green' }, @@ -1667,6 +1689,19 @@ export const useDmsStore = defineStore('dms', { // This is a placeholder for the actual Authentik integration // In a real implementation, this would make API calls to Authentik + if (username === 'superadmin' && password === 'password') { + return { + user: { + id: 'superadmin1', + name: 'Super Admin User', + email: 'superadmin@example.com', + role: 'superadmin', + department: 'IT Department' + }, + token: 'sample-authentik-token' + }; + } + if (username === 'admin' && password === 'password') { return { user: { @@ -1686,8 +1721,8 @@ export const useDmsStore = defineStore('dms', { id: 'user1', name: 'Aiman Fakhrullah', email: 'aiman@example.com', - role: 'engineer', - department: 'JKR Bahagian Kejuruteraan Awam Cawangan Kota Bharu' + role: 'user', + department: 'General Department' }, token: 'sample-authentik-token' }; @@ -1705,6 +1740,39 @@ export const useDmsStore = defineStore('dms', { // In a real implementation, this would fetch RBAC permissions from Authentik const permissions = { + 'superadmin1': { + roles: ['superadmin'], + permissions: { + documents: { + view: true, + edit: true, + delete: true, + approve: true, + reject: true, + download: true + }, + cabinets: { + view: true, + create: true, + edit: true, + delete: true + }, + accessRequests: { + approve: true, + reject: true, + viewAll: true + }, + systemSettings: { + manage: true + }, + users: { + manage: true + }, + roles: { + manage: true + } + } + }, 'admin1': { roles: ['admin'], permissions: { @@ -1726,11 +1794,20 @@ export const useDmsStore = defineStore('dms', { approve: true, reject: true, viewAll: true + }, + systemSettings: { + manage: false + }, + users: { + manage: false + }, + roles: { + manage: false } } }, 'user1': { - roles: ['engineer'], + roles: ['user'], permissions: { documents: { view: true, @@ -1750,6 +1827,15 @@ export const useDmsStore = defineStore('dms', { approve: false, reject: false, viewAll: false + }, + systemSettings: { + manage: false + }, + users: { + manage: false + }, + roles: { + manage: false } } } @@ -1776,6 +1862,15 @@ export const useDmsStore = defineStore('dms', { approve: false, reject: false, viewAll: false + }, + systemSettings: { + manage: false + }, + users: { + manage: false + }, + roles: { + manage: false } } };