Changeset - d534aff5e82a
[Not reviewed]
beta
0 1 0
Marcin Kuzminski - 15 years ago 2011-04-18 20:55:37
marcin@python-works.com
user defined permission will update the global permissions, and overwrite default settings.
1 file changed with 23 insertions and 12 deletions:
0 comments (0 inline, 0 general)
rhodecode/model/user.py
Show inline comments
 
@@ -39,11 +39,15 @@ from rhodecode.lib import generate_api_k
 

	
 
log = logging.getLogger(__name__)
 

	
 

	
 
PERM_ = ''
 

	
 
PERM_WEIGHTS = {'repository.none':0,
 
                'repository.read':1,
 
                'repository.write':3,
 
                'repository.admin':3}
 

	
 

	
 
class UserModel(BaseModel):
 

	
 
    def get(self, user_id, cache=False):
 
@@ -260,9 +264,9 @@ class UserModel(BaseModel):
 
        user.permissions['repositories'] = {}
 
        user.permissions['global'] = set()
 

	
 
        #===========================================================================
 
        #======================================================================
 
        # fetch default permissions
 
        #===========================================================================
 
        #======================================================================
 
        default_user = self.get_by_username('default', cache=True)
 

	
 
        default_perms = self.sa.query(RepoToPerm, Repository, Permission)\
 
@@ -271,9 +275,9 @@ class UserModel(BaseModel):
 
            .filter(RepoToPerm.user == default_user).all()
 

	
 
        if user.is_admin:
 
            #=======================================================================
 
            #==================================================================
 
            # #admin have all default rights set to admin
 
            #=======================================================================
 
            #==================================================================
 
            user.permissions['global'].add('hg.admin')
 

	
 
            for perm in default_perms:
 
@@ -281,14 +285,13 @@ class UserModel(BaseModel):
 
                user.permissions['repositories'][perm.RepoToPerm.repository.repo_name] = p
 

	
 
        else:
 
            #=======================================================================
 
            #==================================================================
 
            # set default permissions
 
            #=======================================================================
 
            #==================================================================
 

	
 
            #default global
 
            default_global_perms = self.sa.query(UserToPerm)\
 
                .filter(UserToPerm.user == self.sa.query(User)\
 
                       .filter(User.username == 'default').one())
 
                .filter(UserToPerm.user == User.by_username('default'))
 

	
 
            for perm in default_global_perms:
 
                user.permissions['global'].add(perm.permission.permission_name)
 
@@ -306,15 +309,23 @@ class UserModel(BaseModel):
 

	
 
                user.permissions['repositories'][perm.RepoToPerm.repository.repo_name] = p
 

	
 
            #=======================================================================
 
            #==================================================================
 
            # overwrite default with user permissions if any
 
            #=======================================================================
 
            user_perms = self.sa.query(RepoToPerm, Permission, Repository)\
 
            #==================================================================
 

	
 
            user_perms = self.sa.query(UserToPerm)\
 
                        .filter(UserToPerm.user ==
 
                                User.get(user.user_id)).all()
 

	
 
            for perm in user_perms:
 
                user.permissions['global'].add(perm.permission.permission_name)
 

	
 
            user_repo_perms = self.sa.query(RepoToPerm, Permission, Repository)\
 
                .join((Repository, RepoToPerm.repository_id == Repository.repo_id))\
 
                .join((Permission, RepoToPerm.permission_id == Permission.permission_id))\
 
                .filter(RepoToPerm.user_id == user.user_id).all()
 

	
 
            for perm in user_perms:
 
            for perm in user_repo_perms:
 
                if perm.Repository.user_id == user.user_id:#set admin if owner
 
                    p = 'repository.admin'
 
                else:
0 comments (0 inline, 0 general)