@@ -142,7 +142,7 @@ func (handler UserRestHandlerImpl) CreateUser(w http.ResponseWriter, r *http.Req
142142 //RBAC enforcer Ends
143143 //In create req, we also check if any email exists already. If yes, then in that case we go on and merge existing roles and groups with the ones in request
144144 //but rbac is only checked on create request roles and groups as existing roles and groups are assumed to be checked when created/updated before
145- res , err := handler .userService .CreateUser (& userInfo )
145+ res , err := handler .userService .CreateUser (& userInfo , token , handler . CheckManagerAuth )
146146 if err != nil {
147147 handler .logger .Errorw ("service err, CreateUser" , "err" , err , "payload" , userInfo )
148148 if _ , ok := err .(* util.ApiError ); ok {
@@ -192,7 +192,7 @@ func (handler UserRestHandlerImpl) UpdateUser(w http.ResponseWriter, r *http.Req
192192 return
193193 }
194194
195- res , err := handler .userService .UpdateUser (& userInfo , token , handler .checkRBACForUserUpdate )
195+ res , err := handler .userService .UpdateUser (& userInfo , token , handler .checkRBACForUserUpdate , handler . CheckManagerAuth )
196196 if err != nil {
197197 handler .logger .Errorw ("service err, UpdateUser" , "err" , err , "payload" , userInfo )
198198 common .WriteJsonResp (w , err , "" , http .StatusInternalServerError )
@@ -243,18 +243,9 @@ func (handler UserRestHandlerImpl) GetById(w http.ResponseWriter, r *http.Reques
243243 // RBAC enforcer applying
244244 filteredRoleFilter := make ([]bean.RoleFilter , 0 )
245245 if res .RoleFilters != nil && len (res .RoleFilters ) > 0 {
246+ isUserSuperAdmin := handler .enforcer .Enforce (token , casbin .ResourceGlobal , casbin .ActionGet , "*" )
246247 for _ , filter := range res .RoleFilters {
247- authPass := true
248- if len (filter .Team ) > 0 {
249- if ok := handler .enforcer .Enforce (token , casbin .ResourceUser , casbin .ActionGet , filter .Team ); ! ok {
250- authPass = false
251- }
252- }
253- if filter .Entity == bean2 .CLUSTER_ENTITIY {
254- if ok := handler .userCommonService .CheckRbacForClusterEntity (filter .Cluster , filter .Namespace , filter .Group , filter .Kind , filter .Resource , token , handler .CheckManagerAuth ); ! ok {
255- authPass = false
256- }
257- }
248+ authPass := handler .checkRbacForFilter (token , filter , isUserSuperAdmin )
258249 if authPass {
259250 filteredRoleFilter = append (filteredRoleFilter , filter )
260251 }
@@ -578,18 +569,9 @@ func (handler UserRestHandlerImpl) FetchRoleGroupById(w http.ResponseWriter, r *
578569 token := r .Header .Get ("token" )
579570 filteredRoleFilter := make ([]bean.RoleFilter , 0 )
580571 if res .RoleFilters != nil && len (res .RoleFilters ) > 0 {
572+ isUserSuperAdmin := handler .enforcer .Enforce (token , casbin .ResourceGlobal , casbin .ActionGet , "*" )
581573 for _ , filter := range res .RoleFilters {
582- authPass := true
583- if len (filter .Team ) > 0 {
584- if ok := handler .enforcer .Enforce (token , casbin .ResourceUser , casbin .ActionGet , filter .Team ); ! ok {
585- authPass = false
586- }
587- }
588- if filter .Entity == bean2 .CLUSTER_ENTITIY {
589- if isValidAuth := handler .userCommonService .CheckRbacForClusterEntity (filter .Cluster , filter .Namespace , filter .Group , filter .Kind , filter .Resource , token , handler .CheckManagerAuth ); ! isValidAuth {
590- authPass = false
591- }
592- }
574+ authPass := handler .checkRbacForFilter (token , filter , isUserSuperAdmin )
593575 if authPass {
594576 filteredRoleFilter = append (filteredRoleFilter , filter )
595577 }
@@ -610,6 +592,35 @@ func (handler UserRestHandlerImpl) FetchRoleGroupById(w http.ResponseWriter, r *
610592 common .WriteJsonResp (w , err , res , http .StatusOK )
611593}
612594
595+ func (handler UserRestHandlerImpl ) checkRbacForFilter (token string , filter bean.RoleFilter , isUserSuperAdmin bool ) bool {
596+ isAuthorised := true
597+ switch {
598+ case isUserSuperAdmin :
599+ isAuthorised = true
600+ case filter .AccessType == bean2 .APP_ACCESS_TYPE_HELM || filter .Entity == bean2 .EntityJobs :
601+ if ok := handler .enforcer .Enforce (token , casbin .ResourceGlobal , casbin .ActionGet , "*" ); ! ok {
602+ isAuthorised = false
603+ }
604+
605+ case len (filter .Team ) > 0 :
606+ // this is case of devtron app
607+ if ok := handler .enforcer .Enforce (token , casbin .ResourceUser , casbin .ActionGet , filter .Team ); ! ok {
608+ isAuthorised = false
609+ }
610+
611+ case filter .Entity == bean .CLUSTER_ENTITIY :
612+ isValidAuth := handler .userCommonService .CheckRbacForClusterEntity (filter .Cluster , filter .Namespace , filter .Group , filter .Kind , filter .Resource , token , handler .CheckManagerAuth )
613+ if ! isValidAuth {
614+ isAuthorised = false
615+ }
616+ case filter .Entity == bean .CHART_GROUP_ENTITY :
617+ isAuthorised = true
618+ default :
619+ isAuthorised = false
620+ }
621+ return isAuthorised
622+ }
623+
613624func (handler UserRestHandlerImpl ) CreateRoleGroup (w http.ResponseWriter , r * http.Request ) {
614625 decoder := json .NewDecoder (r .Body )
615626 userId , err := handler .userService .GetLoggedInUser (r )
@@ -698,7 +709,7 @@ func (handler UserRestHandlerImpl) UpdateRoleGroup(w http.ResponseWriter, r *htt
698709 return
699710 }
700711
701- res , err := handler .roleGroupService .UpdateRoleGroup (& request , token , handler .checkRBACForRoleGroupUpdate )
712+ res , err := handler .roleGroupService .UpdateRoleGroup (& request , token , handler .checkRBACForRoleGroupUpdate , handler . CheckManagerAuth )
702713 if err != nil {
703714 handler .logger .Errorw ("service err, UpdateRoleGroup" , "err" , err , "payload" , request )
704715 common .WriteJsonResp (w , err , "" , http .StatusInternalServerError )
@@ -908,7 +919,7 @@ func (handler UserRestHandlerImpl) DeleteRoleGroup(w http.ResponseWriter, r *htt
908919 return
909920 }
910921 token := r .Header .Get ("token" )
911- isAuthorised , err := handler .checkRBACForRoleGroupDelete (token , userGroup . RoleFilters )
922+ isAuthorised , err := handler .checkRBACForRoleGroupDelete (token , userGroup )
912923 if err != nil {
913924 common .WriteJsonResp (w , err , "" , http .StatusInternalServerError )
914925 return
@@ -1138,7 +1149,7 @@ func (handler UserRestHandlerImpl) checkRBACForUserCreate(token string, requestS
11381149 isAuthorised = false
11391150 }
11401151 if ! isAuthorised {
1141- break
1152+ return false , nil
11421153 }
11431154 }
11441155 }
@@ -1167,7 +1178,7 @@ func (handler UserRestHandlerImpl) checkRBACForUserCreate(token string, requestS
11671178 isAuthorised = false
11681179 }
11691180 if ! isAuthorised {
1170- break
1181+ return false , nil
11711182 }
11721183 }
11731184 } else {
@@ -1206,7 +1217,7 @@ func (handler UserRestHandlerImpl) checkRBACForUserUpdate(token string, userInfo
12061217 isAuthorised = false
12071218 }
12081219 if ! isAuthorised {
1209- break
1220+ return false , nil
12101221 }
12111222 }
12121223 }
@@ -1225,7 +1236,7 @@ func (handler UserRestHandlerImpl) checkRBACForUserUpdate(token string, userInfo
12251236 isAuthorised = false
12261237 }
12271238 if ! isAuthorised {
1228- break
1239+ return false , nil
12291240 }
12301241 }
12311242 }
@@ -1252,7 +1263,7 @@ func (handler UserRestHandlerImpl) checkRBACForUserUpdate(token string, userInfo
12521263 isAuthorised = false
12531264 }
12541265 if ! isAuthorised {
1255- break
1266+ return false , nil
12561267 }
12571268 }
12581269 } else {
@@ -1263,11 +1274,10 @@ func (handler UserRestHandlerImpl) checkRBACForUserUpdate(token string, userInfo
12631274 return isAuthorised , nil
12641275}
12651276
1266- func (handler UserRestHandlerImpl ) checkRBACForRoleGroupUpdate (token string , groupInfo * bean.RoleGroup ,
1267- eliminatedRoleFilters []* repository.RoleModel ) (isAuthorised bool , err error ) {
1277+ func (handler UserRestHandlerImpl ) checkRBACForRoleGroupUpdate (token string , groupInfo * bean.RoleGroup , eliminatedRoleFilters []* repository.RoleModel , isRoleGroupAlreadySuperAdmin bool ) (isAuthorised bool , err error ) {
12681278 isActionUserSuperAdmin := handler .enforcer .Enforce (token , casbin .ResourceGlobal , casbin .ActionGet , "*" )
12691279 requestSuperAdmin := groupInfo .SuperAdmin
1270- if requestSuperAdmin && ! isActionUserSuperAdmin {
1280+ if ( requestSuperAdmin || isRoleGroupAlreadySuperAdmin ) && ! isActionUserSuperAdmin {
12711281 //if user is going to be provided with super-admin access or already a super-admin then the action user should be a super-admin
12721282 return false , nil
12731283 }
@@ -1290,7 +1300,7 @@ func (handler UserRestHandlerImpl) checkRBACForRoleGroupUpdate(token string, gro
12901300 isAuthorised = false
12911301 }
12921302 if ! isAuthorised {
1293- break
1303+ return false , nil
12941304 }
12951305 }
12961306 }
@@ -1309,20 +1319,23 @@ func (handler UserRestHandlerImpl) checkRBACForRoleGroupUpdate(token string, gro
13091319 isAuthorised = false
13101320 }
13111321 if ! isAuthorised {
1312- break
1322+ return false , nil
13131323 }
13141324 }
13151325 }
13161326 }
13171327 return isAuthorised , nil
13181328}
13191329
1320- func (handler UserRestHandlerImpl ) checkRBACForRoleGroupDelete (token string , groupRoles [] bean.RoleFilter ) (isAuthorised bool , err error ) {
1330+ func (handler UserRestHandlerImpl ) checkRBACForRoleGroupDelete (token string , userGroup * bean.RoleGroup ) (isAuthorised bool , err error ) {
13211331 isActionUserSuperAdmin := handler .enforcer .Enforce (token , casbin .ResourceGlobal , casbin .ActionGet , "*" )
1332+ if userGroup .SuperAdmin && ! isActionUserSuperAdmin {
1333+ return false , nil
1334+ }
13221335 isAuthorised = isActionUserSuperAdmin
13231336 if ! isAuthorised {
1324- if groupRoles != nil && len (groupRoles ) > 0 { //auth check inside roleFilters
1325- for _ , filter := range groupRoles {
1337+ if userGroup . RoleFilters != nil && len (userGroup . RoleFilters ) > 0 { //auth check inside roleFilters
1338+ for _ , filter := range userGroup . RoleFilters {
13261339 switch {
13271340 case filter .Action == bean .ACTION_SUPERADMIN :
13281341 isAuthorised = isActionUserSuperAdmin
@@ -1338,7 +1351,7 @@ func (handler UserRestHandlerImpl) checkRBACForRoleGroupDelete(token string, gro
13381351 isAuthorised = false
13391352 }
13401353 if ! isAuthorised {
1341- break
1354+ return false , nil
13421355 }
13431356 }
13441357 }
0 commit comments