comparison rhodecode/model/repo_permission.py @ 2031:82a88013a3fd

merge 1.3 into stable
author Marcin Kuzminski <marcin@python-works.com>
date Sun, 26 Feb 2012 17:25:09 +0200
parents 702e29ce1e9b 87f0800abc7b
children 63e58ef80ef1
comparison
equal deleted inserted replaced
2005:ab0e122b38a7 2031:82a88013a3fd
6 repository permission model for RhodeCode 6 repository permission model for RhodeCode
7 7
8 :created_on: Oct 1, 2011 8 :created_on: Oct 1, 2011
9 :author: nvinot, marcink 9 :author: nvinot, marcink
10 :copyright: (C) 2011-2011 Nicolas Vinot <aeris@imirhil.fr> 10 :copyright: (C) 2011-2011 Nicolas Vinot <aeris@imirhil.fr>
11 :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com> 11 :copyright: (C) 2011-2012 Marcin Kuzminski <marcin@python-works.com>
12 :license: GPLv3, see COPYING for more details. 12 :license: GPLv3, see COPYING for more details.
13 """ 13 """
14 # This program is free software: you can redistribute it and/or modify 14 # This program is free software: you can redistribute it and/or modify
15 # it under the terms of the GNU General Public License as published by 15 # it under the terms of the GNU General Public License as published by
16 # the Free Software Foundation, either version 3 of the License, or 16 # the Free Software Foundation, either version 3 of the License, or
23 # 23 #
24 # You should have received a copy of the GNU General Public License 24 # You should have received a copy of the GNU General Public License
25 # along with this program. If not, see <http://www.gnu.org/licenses/>. 25 # along with this program. If not, see <http://www.gnu.org/licenses/>.
26 26
27 import logging 27 import logging
28 from rhodecode.model.db import BaseModel, RepoToPerm, Permission,\ 28 from rhodecode.model import BaseModel
29 UsersGroupRepoToPerm 29 from rhodecode.model.db import UserRepoToPerm, UsersGroupRepoToPerm, Permission,\
30 from rhodecode.model.meta import Session 30 User, Repository
31 31
32 log = logging.getLogger(__name__) 32 log = logging.getLogger(__name__)
33 33
34 34
35 class RepositoryPermissionModel(BaseModel): 35 class RepositoryPermissionModel(BaseModel):
36
37 def __get_user(self, user):
38 return self._get_instance(User, user, callback=User.get_by_username)
39
40 def __get_repo(self, repository):
41 return self._get_instance(Repository, repository,
42 callback=Repository.get_by_repo_name)
43
44 def __get_perm(self, permission):
45 return self._get_instance(Permission, permission,
46 callback=Permission.get_by_key)
47
36 def get_user_permission(self, repository, user): 48 def get_user_permission(self, repository, user):
37 return RepoToPerm.query() \ 49 repository = self.__get_repo(repository)
38 .filter(RepoToPerm.user == user) \ 50 user = self.__get_user(user)
39 .filter(RepoToPerm.repository == repository) \ 51
52 return UserRepoToPerm.query() \
53 .filter(UserRepoToPerm.user == user) \
54 .filter(UserRepoToPerm.repository == repository) \
40 .scalar() 55 .scalar()
41 56
42 def update_user_permission(self, repository, user, permission): 57 def update_user_permission(self, repository, user, permission):
43 permission = Permission.get_by_key(permission) 58 permission = Permission.get_by_key(permission)
44 current = self.get_user_permission(repository, user) 59 current = self.get_user_permission(repository, user)
45 if current: 60 if current:
46 if not current.permission is permission: 61 if not current.permission is permission:
47 current.permission = permission 62 current.permission = permission
48 else: 63 else:
49 p = RepoToPerm() 64 p = UserRepoToPerm()
50 p.user = user 65 p.user = user
51 p.repository = repository 66 p.repository = repository
52 p.permission = permission 67 p.permission = permission
53 Session.add(p) 68 self.sa.add(p)
54 Session.commit()
55 69
56 def delete_user_permission(self, repository, user): 70 def delete_user_permission(self, repository, user):
57 current = self.get_user_permission(repository, user) 71 current = self.get_user_permission(repository, user)
58 if current: 72 if current:
59 Session.delete(current) 73 self.sa.delete(current)
60 Session.commit()
61 74
62 def get_users_group_permission(self, repository, users_group): 75 def get_users_group_permission(self, repository, users_group):
63 return UsersGroupRepoToPerm.query() \ 76 return UsersGroupRepoToPerm.query() \
64 .filter(UsersGroupRepoToPerm.users_group == users_group) \ 77 .filter(UsersGroupRepoToPerm.users_group == users_group) \
65 .filter(UsersGroupRepoToPerm.repository == repository) \ 78 .filter(UsersGroupRepoToPerm.repository == repository) \
76 p = UsersGroupRepoToPerm() 89 p = UsersGroupRepoToPerm()
77 p.users_group = users_group 90 p.users_group = users_group
78 p.repository = repository 91 p.repository = repository
79 p.permission = permission 92 p.permission = permission
80 self.sa.add(p) 93 self.sa.add(p)
81 Session.commit()
82 94
83 def delete_users_group_permission(self, repository, users_group): 95 def delete_users_group_permission(self, repository, users_group):
84 current = self.get_users_group_permission(repository, users_group) 96 current = self.get_users_group_permission(repository, users_group)
85 if current: 97 if current:
86 self.sa.delete(current) 98 self.sa.delete(current)
87 Session.commit()
88 99
89 def update_or_delete_user_permission(self, repository, user, permission): 100 def update_or_delete_user_permission(self, repository, user, permission):
90 if permission: 101 if permission:
91 self.update_user_permission(repository, user, permission) 102 self.update_user_permission(repository, user, permission)
92 else: 103 else: