11//every component
22import { UTILS } from '@terminusdb/terminusdb-client'
3-
3+ import { filterCapability } from "./utils/searchResult"
44export const AccessControlDashboard = ( clientAccessControl ) => {
55
66 let __rolesList = [ ]
77 let __teamUserRoles = null // an array of roles
88 let __teamUserActions = null
9- let __userDBRoles = null
10- let __dbUserActions = null
9+
10+ let __databasesUserRoles = null // all the dbs capabilities of present
11+ let __dbUserRoles = null // the current database user roles
12+ let __dbUserActions = null // the current database actions
13+
1114 let __clientAccessControl = clientAccessControl
1215 //let __currentUser =
1316
1417 async function callGetRolesList ( roleRemoveFilter ) {
15- try {
16- const list = await __clientAccessControl . getAccessRoles ( )
17- __rolesList = list
18- if ( roleRemoveFilter ) {
19- __rolesList = list . filter ( item => ! roleRemoveFilter [ item [ "@id" ] ] )
20- }
21-
22- return __rolesList
23- } catch ( err ) {
24- console . log ( 'I can not get the role list' , err )
18+ try {
19+ const list = await __clientAccessControl . getAccessRoles ( )
20+ __rolesList = list
21+ if ( roleRemoveFilter ) {
22+ __rolesList = list . filter ( item => ! roleRemoveFilter [ item [ "@id" ] ] )
2523 }
24+
25+ return __rolesList
26+ } catch ( err ) {
27+ console . log ( 'I can not get the role list' , err )
28+ }
2629 }
2730
28- // review with database capability
29- // before we have to fix team
31+ // review with database capability
32+ // before we have to fix team
33+ // if we have a database role we can see the database id no the database name but we use the database name to identify a
34+ // database inside the dashboard and in the client
3035 async function callGetUserTeamRole ( userName , orgName ) {
3136 try {
3237 const result = await __clientAccessControl . getTeamUserRoles ( userName , orgName )
3338 let teamRoles = [ ]
39+ let dbUserRole = { }
3440 if ( result && result . capability && result . capability . length > 0 ) {
3541 if ( result . capability . length === 1 ) {
3642 teamRoles = result . capability [ 0 ] . role
3743 } else {
3844 const orgId = `Organization/${ UTILS . encodeURISegment ( orgName ) } `
39- const cap = result . capability . find ( item => item . scope === orgId )
40- teamRoles = cap && cap . role ? cap . role : [ ]
45+ const { role, databases} = filterCapability ( result . capability , orgId )
46+ teamRoles = role || [ ]
47+ dbUserRole = databases
4148 }
4249 }
43- setTeamActions ( teamRoles )
50+ setTeamActions ( teamRoles , dbUserRole )
4451 } catch ( err ) {
4552 if ( err . data && err . status === 404 && err . data [ "api:message" ] ) {
4653 throw new Error ( err . data [ "api:message" ] )
@@ -67,30 +74,28 @@ export const AccessControlDashboard = (clientAccessControl)=>{
6774 return actionsObj
6875 }
6976
70- const setTeamActions = ( teamRoles , dbUserRole ) => {
77+ const setTeamActions = ( teamRoles , databasesUserRoles ) => {
7178 // const database = databaseRoles.find(element => element["name"]["@value"] === dataproduct);
7279 //const role = database ? database['role'] : teamRole
7380 __teamUserRoles = teamRoles
7481 __teamUserActions = formatActionsRoles ( teamRoles )
75- __userDBRoles = dbUserRole
76- //if change the team I reset the __dbUserActions === at the teamActions
82+ // all the database capabilities
83+ __databasesUserRoles = databasesUserRoles
84+ // I have to find a way to set the db_user actions
85+ __dbUserRoles = null
7786 __dbUserActions = null
7887 }
7988
89+ // ??
8090 const setDBUserActions = ( id ) => {
81- if ( ! id ) {
82- __dbUserActions = null
83- return
84- }
85- if ( ! Array . isArray ( __userDBRoles ) ) return
86- const database = __userDBRoles . find ( element => element [ "name" ] [ "@value" ] === id ) ;
87- const role = database ? database [ 'role' ] : null
88- //no role could be a new database
89- if ( ! role || role === __teamUserRole ) {
90- __dbUserActions = __teamUserActions
91- } else {
92- __dbUserActions = formatActionsRoles ( role )
93- }
91+ __dbUserActions = null
92+ __dbUserRoles = null
93+ if ( ! __databasesUserRoles ) return
94+ const databaseRoles = __databasesUserRoles [ id ]
95+ if ( databaseRoles ) {
96+ __dbUserRoles = databaseRoles
97+ __dbUserActions = formatActionsRoles ( databaseRoles )
98+ }
9499 }
95100
96101 const isAdmin = ( ) => {
@@ -107,31 +112,43 @@ export const AccessControlDashboard = (clientAccessControl)=>{
107112 return __teamUserActions [ DELETE_DATABASE ] ? true : false
108113 }
109114
115+
116+ const checkDBManagmentAccess = ( actionName ) => {
117+ // no team roles the access is always false
118+ if ( ! __teamUserActions ) return false
119+ if ( __teamUserActions [ actionName ] ) return true
120+ if ( __dbUserActions && __dbUserActions [ actionName ] ) return true
121+ return false
122+ }
110123 //!!!TO BE REVIEW
111124 // I have to move this check at database-level
112125 const schemaWrite = ( ) => {
113- if ( ! __teamUserActions ) return false
114- return __teamUserActions [ SCHEMA_WRITE_ACCESS ] ? true : false
126+ return checkDBManagmentAccess ( SCHEMA_WRITE_ACCESS )
115127 }
116128
117129 const classFrame = ( ) => {
118- if ( ! __teamUserActions ) return false
119- return __teamUserActions [ CLASS_FRAME ] ? true : false
130+ return checkDBManagmentAccess ( CLASS_FRAME )
120131 }
121132
122133 const instanceRead = ( ) => {
123- if ( ! __teamUserActions ) return false
124- return __teamUserActions [ INSTANCE_READ_ACCESS ] ? true : false
134+ return checkDBManagmentAccess ( INSTANCE_READ_ACCESS )
125135 }
126136
127137 const instanceWrite = ( ) => {
128- if ( ! __teamUserActions ) return false
129- return __teamUserActions [ INSTANCE_WRITE_ACCESS ] ? true : false
138+ console . log ( "INSTANCE_WRITE_ACCESS" , checkDBManagmentAccess ( INSTANCE_WRITE_ACCESS ) )
139+ return checkDBManagmentAccess ( INSTANCE_WRITE_ACCESS )
130140 }
131141
132142 const branch = ( ) => {
133- if ( ! __teamUserActions ) return false
134- return __teamUserActions [ BRANCH ] ? true : false
143+ return checkDBManagmentAccess ( BRANCH )
144+ }
145+
146+ const commitRead = ( ) => {
147+ return checkDBManagmentAccess ( COMMIT_READ_ACCESS )
148+ }
149+
150+ const commitWrite = ( ) => {
151+ return checkDBManagmentAccess ( COMMIT_WRITE_ACCESS )
135152 }
136153
137154 const getRolesList = ( ) => {
@@ -147,8 +164,14 @@ export const AccessControlDashboard = (clientAccessControl)=>{
147164 return __teamUserRoles
148165 }
149166
167+ const getDatabaseUserRoles = ( ) => {
168+ return __dbUserRoles
169+ }
150170
151- return { createDB,
171+ return { getDatabaseUserRoles,
172+ commitRead,
173+ commitWrite,
174+ createDB,
152175 classFrame,
153176 instanceRead,
154177 instanceWrite,
0 commit comments