GetImplicitResourcesForUser returns all policies that user obtaining in domain.
(user string, domain ...string)
| 427 | |
| 428 | // GetImplicitResourcesForUser returns all policies that user obtaining in domain. |
| 429 | func (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. |
| 468 | func deepCopyPolicy(src []string) []string { |