diff --git a/rhodecode/lib/auth.py b/rhodecode/lib/auth.py index 94661097..8a05972a 100644 --- a/rhodecode/lib/auth.py +++ b/rhodecode/lib/auth.py @@ -413,7 +413,7 @@ class BranchPermOriginDict(dict): else: (pattern_perm, origin) = pattern_perm_origin - # we're passing in the dict, so we save the the stack + # we're passing in the dict, so we save the stack for pattern, perm in list(pattern_perm.items()): self.perm_origin_stack.setdefault(key, {}).setdefault(pattern, []).append((perm, origin)) @@ -849,7 +849,9 @@ class PermissionCalculator(object): multiple_counter[r_k] += 1 if multiple_counter[r_k] > 1: - cur_perm = self.permissions_repository_branches[r_k][pattern] + # Get the previous permission for this pattern, with fallback, from perm_origin_stack that keeps history + pattern_perms = self.permissions_repository_branches.perm_origin_stack.get(r_k, {}).get(pattern, []) + cur_perm = pattern_perms[0][0] if pattern_perms else "branch.none" p = self._choose_permission(p, cur_perm) self.permissions_repository_branches[r_k] = {pattern: p}, o