annotate rhodecode/model/repo_permission.py @ 3420:a6bef3e8a361 beta

Update changeset cache should use non-cache version of repo if given attribute is empty, it's easier to controll how changesets are udpated The quick update logic in base controller get's cached version and updates, while any other call will use non-cached version
author Marcin Kuzminski <marcin@python-works.com>
date Fri, 01 Mar 2013 17:56:31 +0100
parents fa6ba6727475
children 3563bb7b4b82
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1586
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
2 """
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
3 rhodecode.model.users_group
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
5
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
6 repository permission model for RhodeCode
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
7
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
8 :created_on: Oct 1, 2011
1793
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
9 :author: nvinot, marcink
1586
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
10 :copyright: (C) 2011-2011 Nicolas Vinot <aeris@imirhil.fr>
1824
89efedac4e6c 2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
11 :copyright: (C) 2011-2012 Marcin Kuzminski <marcin@python-works.com>
1586
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
12 :license: GPLv3, see COPYING for more details.
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
13 """
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
14 # This program is free software: you can redistribute it and/or modify
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
15 # it under the terms of the GNU General Public License as published by
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
16 # the Free Software Foundation, either version 3 of the License, or
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
17 # (at your option) any later version.
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
18 #
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
19 # This program is distributed in the hope that it will be useful,
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
20 # but WITHOUT ANY WARRANTY; without even the implied warranty of
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
21 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
22 # GNU General Public License for more details.
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
23 #
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
24 # You should have received a copy of the GNU General Public License
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
25 # along with this program. If not, see <http://www.gnu.org/licenses/>.
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
26
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
27 import logging
1716
7d1fc253549e notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
28 from rhodecode.model import BaseModel
3417
fa6ba6727475 further cleanup of UsersGroup
Mads Kiilerich <madski@unity3d.com>
parents: 2522
diff changeset
29 from rhodecode.model.db import UserRepoToPerm, UserGroupRepoToPerm, \
2432
d3ac7491a5c8 Share common getter functions in base model, and remove duplicated functions from other models
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
30 Permission
1586
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
31
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1589
diff changeset
32 log = logging.getLogger(__name__)
1586
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
33
1716
7d1fc253549e notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
34
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1589
diff changeset
35 class RepositoryPermissionModel(BaseModel):
1716
7d1fc253549e notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
36
2522
17893d61792a Added associated classes into child models
Marcin Kuzminski <marcin@python-works.com>
parents: 2432
diff changeset
37 cls = UserRepoToPerm
17893d61792a Added associated classes into child models
Marcin Kuzminski <marcin@python-works.com>
parents: 2432
diff changeset
38
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1589
diff changeset
39 def get_user_permission(self, repository, user):
2432
d3ac7491a5c8 Share common getter functions in base model, and remove duplicated functions from other models
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
40 repository = self._get_repo(repository)
d3ac7491a5c8 Share common getter functions in base model, and remove duplicated functions from other models
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
41 user = self._get_user(user)
1982
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1824
diff changeset
42
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
43 return UserRepoToPerm.query() \
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
44 .filter(UserRepoToPerm.user == user) \
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
45 .filter(UserRepoToPerm.repository == repository) \
1586
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
46 .scalar()
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
47
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1589
diff changeset
48 def update_user_permission(self, repository, user, permission):
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1589
diff changeset
49 permission = Permission.get_by_key(permission)
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1589
diff changeset
50 current = self.get_user_permission(repository, user)
1586
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
51 if current:
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
52 if not current.permission is permission:
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
53 current.permission = permission
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
54 else:
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
55 p = UserRepoToPerm()
1586
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
56 p.user = user
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
57 p.repository = repository
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
58 p.permission = permission
1716
7d1fc253549e notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
59 self.sa.add(p)
1586
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
60
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1589
diff changeset
61 def delete_user_permission(self, repository, user):
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1589
diff changeset
62 current = self.get_user_permission(repository, user)
1589
307ec693bdf2 [API] Create groups needed when creating repo
Nicolas VINOT <aeris@imirhil.fr>
parents: 1586
diff changeset
63 if current:
1716
7d1fc253549e notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
64 self.sa.delete(current)
1586
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
65
1793
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
66 def get_users_group_permission(self, repository, users_group):
3417
fa6ba6727475 further cleanup of UsersGroup
Mads Kiilerich <madski@unity3d.com>
parents: 2522
diff changeset
67 return UserGroupRepoToPerm.query() \
fa6ba6727475 further cleanup of UsersGroup
Mads Kiilerich <madski@unity3d.com>
parents: 2522
diff changeset
68 .filter(UserGroupRepoToPerm.users_group == users_group) \
fa6ba6727475 further cleanup of UsersGroup
Mads Kiilerich <madski@unity3d.com>
parents: 2522
diff changeset
69 .filter(UserGroupRepoToPerm.repository == repository) \
1793
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
70 .scalar()
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
71
1818
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1795
diff changeset
72 def update_users_group_permission(self, repository, users_group,
1793
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
73 permission):
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
74 permission = Permission.get_by_key(permission)
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
75 current = self.get_users_group_permission(repository, users_group)
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
76 if current:
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
77 if not current.permission is permission:
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
78 current.permission = permission
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
79 else:
3417
fa6ba6727475 further cleanup of UsersGroup
Mads Kiilerich <madski@unity3d.com>
parents: 2522
diff changeset
80 p = UserGroupRepoToPerm()
1793
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
81 p.users_group = users_group
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
82 p.repository = repository
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
83 p.permission = permission
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
84 self.sa.add(p)
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
85
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
86 def delete_users_group_permission(self, repository, users_group):
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
87 current = self.get_users_group_permission(repository, users_group)
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
88 if current:
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
89 self.sa.delete(current)
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
90
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1589
diff changeset
91 def update_or_delete_user_permission(self, repository, user, permission):
1586
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
92 if permission:
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1589
diff changeset
93 self.update_user_permission(repository, user, permission)
1586
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
94 else:
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1589
diff changeset
95 self.delete_user_permission(repository, user)
1793
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
96
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
97 def update_or_delete_users_group_permission(self, repository, user_group,
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
98 permission):
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
99 if permission:
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
100 self.update_users_group_permission(repository, user_group,
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
101 permission)
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
102 else:
1818
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1795
diff changeset
103 self.delete_users_group_permission(repository, user_group)