MCPcopy
hub / github.com/apache/casbin / GetImplicitResourcesForUser

Method GetImplicitResourcesForUser

rbac_api.go:429–465  ·  view source on GitHub ↗

GetImplicitResourcesForUser returns all policies that user obtaining in domain.

(user string, domain ...string)

Source from the content-addressed store, hash-verified

427
428// GetImplicitResourcesForUser returns all policies that user obtaining in domain.
429func (e *Enforcer) GetImplicitResourcesForUser(user string, domain ...string) ([][]string, error) {
430 permissions, err := e.GetImplicitPermissionsForUser(user, domain...)
431 if err != nil {
432 return nil, err
433 }
434 res := make([][]string, 0)
435 for _, permission := range permissions {
436 if permission[0] == user {
437 res = append(res, permission)
438 continue
439 }
440 resLocal := [][]string{{user}}
441 tokensLength := len(permission)
442 t := make([][]string, 1, tokensLength)
443 for _, token := range permission[1:] {
444 tokens, err := e.GetImplicitUsersForRole(token, domain...)
445 if err != nil {
446 return nil, err
447 }
448 tokens = append(tokens, token)
449 t = append(t, tokens)
450 }
451 for i := 1; i < tokensLength; i++ {
452 n := make([][]string, 0)
453 for _, tokens := range t[i] {
454 for _, policy := range resLocal {
455 t := append([]string(nil), policy...)
456 t = append(t, tokens)
457 n = append(n, t)
458 }
459 }
460 resLocal = n
461 }
462 res = append(res, resLocal...)
463 }
464 return res, nil
465}
466
467// deepCopyPolicy returns a deepcopy version of the policy to prevent changing policies through returned slice.
468func deepCopyPolicy(src []string) []string {

Callers 1

Calls 2

Tested by 1