repo_permission.py
96 lines
| 3.7 KiB
| text/x-python
|
PythonLexer
Nicolas VINOT
|
r1586 | # -*- coding: utf-8 -*- | |
""" | |||
rhodecode.model.users_group | |||
~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |||
repository permission model for RhodeCode | |||
:created_on: Oct 1, 2011 | |||
r1793 | :author: nvinot, marcink | ||
Nicolas VINOT
|
r1586 | :copyright: (C) 2011-2011 Nicolas Vinot <aeris@imirhil.fr> | |
r1793 | :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com> | ||
Nicolas VINOT
|
r1586 | :license: GPLv3, see COPYING for more details. | |
""" | |||
# This program is free software: you can redistribute it and/or modify | |||
# it under the terms of the GNU General Public License as published by | |||
# the Free Software Foundation, either version 3 of the License, or | |||
# (at your option) any later version. | |||
# | |||
# This program is distributed in the hope that it will be useful, | |||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
# GNU General Public License for more details. | |||
# | |||
# You should have received a copy of the GNU General Public License | |||
# along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
import logging | |||
r1716 | from rhodecode.model import BaseModel | ||
r1793 | from rhodecode.model.db import UserRepoToPerm, UsersGroupRepoToPerm, Permission | ||
Nicolas VINOT
|
r1586 | ||
Nicolas VINOT
|
r1593 | log = logging.getLogger(__name__) | |
Nicolas VINOT
|
r1586 | ||
r1716 | |||
Nicolas VINOT
|
r1593 | class RepositoryPermissionModel(BaseModel): | |
r1716 | |||
Nicolas VINOT
|
r1593 | def get_user_permission(self, repository, user): | |
r1633 | return UserRepoToPerm.query() \ | ||
.filter(UserRepoToPerm.user == user) \ | |||
.filter(UserRepoToPerm.repository == repository) \ | |||
Nicolas VINOT
|
r1586 | .scalar() | |
Nicolas VINOT
|
r1593 | def update_user_permission(self, repository, user, permission): | |
permission = Permission.get_by_key(permission) | |||
current = self.get_user_permission(repository, user) | |||
Nicolas VINOT
|
r1586 | if current: | |
if not current.permission is permission: | |||
current.permission = permission | |||
else: | |||
r1633 | p = UserRepoToPerm() | ||
Nicolas VINOT
|
r1586 | p.user = user | |
p.repository = repository | |||
p.permission = permission | |||
r1716 | self.sa.add(p) | ||
Nicolas VINOT
|
r1586 | ||
Nicolas VINOT
|
r1593 | def delete_user_permission(self, repository, user): | |
current = self.get_user_permission(repository, user) | |||
Nicolas VINOT
|
r1589 | if current: | |
r1716 | self.sa.delete(current) | ||
Nicolas VINOT
|
r1586 | ||
r1793 | 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) | |||
def delete_users_group_permission(self, repository, users_group): | |||
current = self.get_users_group_permission(repository, users_group) | |||
if current: | |||
self.sa.delete(current) | |||
Nicolas VINOT
|
r1593 | def update_or_delete_user_permission(self, repository, user, permission): | |
Nicolas VINOT
|
r1586 | if permission: | |
Nicolas VINOT
|
r1593 | self.update_user_permission(repository, user, permission) | |
Nicolas VINOT
|
r1586 | else: | |
Nicolas VINOT
|
r1593 | self.delete_user_permission(repository, user) | |
r1793 | |||
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) |