diff --git a/rhodecode/model/repo_permission.py b/rhodecode/model/repo_permission.py --- a/rhodecode/model/repo_permission.py +++ b/rhodecode/model/repo_permission.py @@ -6,8 +6,9 @@ repository permission model for RhodeCode :created_on: Oct 1, 2011 - :author: nvinot + :author: nvinot, marcink :copyright: (C) 2011-2011 Nicolas Vinot + :copyright: (C) 2009-2011 Marcin Kuzminski :license: GPLv3, see COPYING for more details. """ # This program is free software: you can redistribute it and/or modify @@ -24,11 +25,13 @@ # along with this program. If not, see . import logging -from rhodecode.model.db import BaseModel, RepoToPerm, Permission +from rhodecode.model.db import BaseModel, RepoToPerm, Permission,\ + UsersGroupRepoToPerm from rhodecode.model.meta import Session log = logging.getLogger(__name__) + class RepositoryPermissionModel(BaseModel): def get_user_permission(self, repository, user): return RepoToPerm.query() \ @@ -56,8 +59,43 @@ class RepositoryPermissionModel(BaseMode Session.delete(current) Session.commit() + def get_users_group_permission(self, repository, users_group): + return UsersGroupRepoToPerm.query() \ + .filter(UsersGroupRepoToPerm.users_group == users_group) \ + .filter(UsersGroupRepoToPerm.repository == repository) \ + .scalar() + + def update_users_group_permission(self, repository, users_group, + permission): + permission = Permission.get_by_key(permission) + current = self.get_users_group_permission(repository, users_group) + if current: + if not current.permission is permission: + current.permission = permission + else: + p = UsersGroupRepoToPerm() + p.users_group = users_group + p.repository = repository + p.permission = permission + self.sa.add(p) + Session.commit() + + def delete_users_group_permission(self, repository, users_group): + current = self.get_users_group_permission(repository, users_group) + if current: + self.sa.delete(current) + Session.commit() + def update_or_delete_user_permission(self, repository, user, permission): if permission: self.update_user_permission(repository, user, permission) else: self.delete_user_permission(repository, user) + + def update_or_delete_users_group_permission(self, repository, user_group, + permission): + if permission: + self.update_users_group_permission(repository, user_group, + permission) + else: + self.delete_users_group_permission(repository, user_group)