From fafbc83909b2eaee07b314ea8408b3a998fcce67 Mon Sep 17 00:00:00 2001 From: Alex Kakyris Date: Fri, 4 Sep 2026 16:45:47 +0300 Subject: [PATCH] use real user role for ACL and navigation --- capif_frontend/src/configs/acl.js | 11 ++++--- capif_frontend/src/context/AuthContext.js | 21 ++++--------- .../layouts/components/acl/getHomeRoute.js | 1 + .../src/navigation/vertical/index.js | 31 +++++++++++++++---- capif_frontend/src/pages/home/index.js | 18 +++++++++++ 5 files changed, 57 insertions(+), 25 deletions(-) create mode 100644 capif_frontend/src/pages/home/index.js diff --git a/capif_frontend/src/configs/acl.js b/capif_frontend/src/configs/acl.js index 44b15d6..9896c23 100644 --- a/capif_frontend/src/configs/acl.js +++ b/capif_frontend/src/configs/acl.js @@ -8,15 +8,18 @@ export const AppAbility = Ability * admin can manage everything and client can just visit ACL page */ const defineRulesFor = (role, subject) => { - const { can, rules } = new AbilityBuilder(AppAbility) + const { can, cannot, rules } = new AbilityBuilder(AppAbility) if (role === 'admin') { can('manage', 'all') + cannot('read', 'user-home') + } else if (role === 'user') { + can('read', 'user-home') } else if (role === 'client') { can(['read'], 'acl-page') - } else { - can(['read', 'create', 'update', 'delete'], subject) } - + // unknown role gets zero rules, which means no access to anything + // Add more roles and rules as needed for your application + return rules } diff --git a/capif_frontend/src/context/AuthContext.js b/capif_frontend/src/context/AuthContext.js index 278aded..a9d9010 100644 --- a/capif_frontend/src/context/AuthContext.js +++ b/capif_frontend/src/context/AuthContext.js @@ -12,7 +12,6 @@ import authConfig from 'src/configs/auth' import { clearCookies, getAccessToken, - getUserData, setAccessToken, setRefreshToken, setUserData @@ -69,7 +68,7 @@ const AuthProvider = ({ children }) => { console.log('After auth/me request') console.log('AuthContext response: ', response) - setUser(getUserData()) // getUserData() -> devuelve el objeto JSON almacenado en la cookie USER_DATA_KEY + setUser({username: response.data.user, role: response.data.role}) setLoading(false) // IF TOKEN VALIDATION FAILS, @@ -81,7 +80,7 @@ const AuthProvider = ({ children }) => { const response = await axiosInstance.post(authConfig.refreshEndpoint) setAccessToken(response.data.access_token) console.log('AuthContext access token: ', response.data.access_token) - setUser(getUserData()) + setUser({username: response.data.user, role: response.data.role}) setLoading(false) } catch (error) { // clearCookies() @@ -118,24 +117,16 @@ const AuthProvider = ({ children }) => { console.log('Login request completed successfully') - if (params.rememberMe) { - console.log('Entered params.rememberMe branch') - setAccessToken(response.data.access_token) - console.log('AuthContext access token: ', response.data.access_token) - const pruebatoken = getAccessToken() - setRefreshToken(response.data.refresh_token) - console.log - setUserData({ username: params.username, role: 'admin' }) - } + setAccessToken(response.data.access_token) + setRefreshToken(response.data.refresh_token) + setUserData({ username: params.username, role: response.data.role }) const returnUrl = router.query.returnUrl - setUser({ username: params.username, role: 'admin' }) + setUser({ username: params.username, role: response.data.role }) const redirectURL = returnUrl && returnUrl !== '/' ? returnUrl : '/' router.replace(redirectURL) - const prueba = getAccessToken() - } catch (err) { console.log(err) if (errorCallback) errorCallback(err) diff --git a/capif_frontend/src/layouts/components/acl/getHomeRoute.js b/capif_frontend/src/layouts/components/acl/getHomeRoute.js index 21e9ab8..b5e63c5 100644 --- a/capif_frontend/src/layouts/components/acl/getHomeRoute.js +++ b/capif_frontend/src/layouts/components/acl/getHomeRoute.js @@ -3,6 +3,7 @@ */ const getHomeRoute = role => { if (role === 'client') return '/acl' + else if (role === 'user') return '/home' else return '/home-dashboards' } diff --git a/capif_frontend/src/navigation/vertical/index.js b/capif_frontend/src/navigation/vertical/index.js index b20f1e3..6718f8e 100644 --- a/capif_frontend/src/navigation/vertical/index.js +++ b/capif_frontend/src/navigation/vertical/index.js @@ -1,34 +1,53 @@ const navigation = () => { return [ + { + title: 'Home', + icon: 'mdi:home-outline', + path: '/home', + action: 'read', + subject: 'user-home' + }, { title: 'Dashboard', icon: 'mdi:home-outline', - path: '/home-dashboards' + path: '/home-dashboards', + action: 'manage', + subject: 'all' }, { title: 'Invokers', icon: 'mdi:baseline-people', - path: '/invokers' + path: '/invokers', + action: 'manage', + subject: 'all' }, { title: 'Providers', icon: 'mdi:baseline-people', - path: '/providers' + path: '/providers', + action: 'manage', + subject: 'all' }, { title: 'APIs', icon: 'mdi:baseline-people', - path: '/services' + path: '/services', + action: 'manage', + subject: 'all' }, { title: 'Users', icon: 'mdi:baseline-people', - path: '/users' + path: '/users', + action: 'manage', + subject: 'all' }, { title: 'Configuration', icon: 'mdi:baseline-people', - path: '/configuration' + path: '/configuration', + action: 'manage', + subject: 'all' } // , diff --git a/capif_frontend/src/pages/home/index.js b/capif_frontend/src/pages/home/index.js new file mode 100644 index 0000000..0016d99 --- /dev/null +++ b/capif_frontend/src/pages/home/index.js @@ -0,0 +1,18 @@ +import Box from '@mui/material/Box' +import Typography from '@mui/material/Typography' + +const Home = () => { + return ( + + Welcome to the Home Page + You are logged in. + + ) +} + +Home.acl = { + action: 'read', + subject: 'user-home' +} + +export default Home \ No newline at end of file -- GitLab