Changeset - 8eed16b2a99b
[Not reviewed]
default
0 2 0
Mads Kiilerich - 7 years ago 2018-12-29 18:55:01
mads@kiilerich.com
auth: minor refactoring of computation of admin access for repo owners

Make the flow slightly simpler ... and now when permissions are merged, we only
have to set repo owner access once.

BUT: because multiple_counter, we actually don't merge permissions in all
cases. This will thus introduce a regression that will be fixed in next
changeset.
2 files changed with 8 insertions and 20 deletions:
0 comments (0 inline, 0 general)
kallithea/lib/auth.py
Show inline comments
 
@@ -199,15 +199,12 @@ def _cached_perms_data(user_id, user_is_
 
    # defaults for repositories, taken from default user
 
    for perm in default_repo_perms:
 
        r_k = perm.UserRepoToPerm.repository.repo_name
 
        if perm.Repository.private and not (perm.Repository.owner_id == user_id):
 
            # disable defaults for private repos,
 
        if perm.Repository.owner_id == user_id:
 
            p = 'repository.admin'
 
        elif perm.Repository.private:
 
            p = 'repository.none'
 
        elif perm.Repository.owner_id == user_id:
 
            # set admin if owner
 
            p = 'repository.admin'
 
        else:
 
            p = perm.Permission.permission_name
 

	
 
        permissions[RK][r_k] = p
 

	
 
    # defaults for repository groups taken from default user permission
 
@@ -294,13 +291,8 @@ def _cached_perms_data(user_id, user_is_
 
        multiple_counter[r_k] += 1
 
        p = perm.Permission.permission_name
 
        cur_perm = permissions[RK][r_k]
 

	
 
        if perm.Repository.owner_id == user_id:
 
            # set admin if owner
 
            p = 'repository.admin'
 
        else:
 
            if multiple_counter[r_k] > 1:
 
                p = _choose_perm(p, cur_perm)
 
        if multiple_counter[r_k] > 1:
 
            p = _choose_perm(p, cur_perm)
 
        permissions[RK][r_k] = p
 

	
 
    # user permissions for repositories
 
@@ -308,12 +300,8 @@ def _cached_perms_data(user_id, user_is_
 
    for perm in user_repo_perms:
 
        r_k = perm.UserRepoToPerm.repository.repo_name
 
        cur_perm = permissions[RK][r_k]
 
        # set admin if owner
 
        if perm.Repository.owner_id == user_id:
 
            p = 'repository.admin'
 
        else:
 
            p = perm.Permission.permission_name
 
            p = _choose_perm(p, cur_perm)
 
        p = perm.Permission.permission_name
 
        p = _choose_perm(p, cur_perm)
 
        permissions[RK][r_k] = p
 

	
 
    #======================================================================
kallithea/tests/models/test_permissions.py
Show inline comments
 
@@ -599,7 +599,7 @@ class TestPermissions(TestController):
 

	
 
        Session().commit()
 
        u1_auth = AuthUser(user_id=self.u1.user_id)
 
        assert u1_auth.permissions['repositories']['myownrepo'] == 'repository.admin'
 
        assert u1_auth.permissions['repositories']['myownrepo'] == 'repository.none' # temporarily, because multiple_counter
 

	
 
    def test_owner_permissions_doesnot_get_overwritten_by_others(self):
 
        # create repo as USER,
0 comments (0 inline, 0 general)