annotate rhodecode/model/repo_permission.py @ 4147:1c8f818787b3 rhodecode-2.2.5-gpl

old style: show the full link box on summary page - no overlap or truncation
author Mads Kiilerich <madski@unity3d.com>
date Wed, 02 Jul 2014 19:03:23 -0400
parents ffd45b185016
children 7e5f8c12a3fc
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 # 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
3 # 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
4 # 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
5 # (at your option) any later version.
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
6 #
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
7 # 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
8 # 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
9 # 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
10 # GNU General Public License for more details.
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
11 #
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
12 # 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
13 # along with this program. If not, see <http://www.gnu.org/licenses/>.
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 3700
diff changeset
14 """
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 3700
diff changeset
15 rhodecode.model.users_group
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 3700
diff changeset
16 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 3700
diff changeset
17
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 3700
diff changeset
18 repository permission model for RhodeCode
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 3700
diff changeset
19
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 3700
diff changeset
20 :created_on: Oct 1, 2011
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 3700
diff changeset
21 :author: nvinot, marcink
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 3700
diff changeset
22 """
1586
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 import logging
1716
7d1fc253549e notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
25 from rhodecode.model import BaseModel
3417
fa6ba6727475 further cleanup of UsersGroup
Mads Kiilerich <madski@unity3d.com>
parents: 2522
diff changeset
26 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
27 Permission
1586
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
28
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1589
diff changeset
29 log = logging.getLogger(__name__)
1586
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
30
1716
7d1fc253549e notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
31
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1589
diff changeset
32 class RepositoryPermissionModel(BaseModel):
1716
7d1fc253549e notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
33
2522
17893d61792a Added associated classes into child models
Marcin Kuzminski <marcin@python-works.com>
parents: 2432
diff changeset
34 cls = UserRepoToPerm
17893d61792a Added associated classes into child models
Marcin Kuzminski <marcin@python-works.com>
parents: 2432
diff changeset
35
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1589
diff changeset
36 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
37 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
38 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
39
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
40 return UserRepoToPerm.query() \
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
41 .filter(UserRepoToPerm.user == user) \
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
42 .filter(UserRepoToPerm.repository == repository) \
1586
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
43 .scalar()
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
44
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1589
diff changeset
45 def update_user_permission(self, repository, user, permission):
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1589
diff changeset
46 permission = Permission.get_by_key(permission)
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1589
diff changeset
47 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
48 if current:
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
49 if not current.permission is permission:
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
50 current.permission = permission
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
51 else:
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
52 p = UserRepoToPerm()
1586
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
53 p.user = user
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
54 p.repository = repository
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
55 p.permission = permission
1716
7d1fc253549e notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
56 self.sa.add(p)
1586
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
57
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1589
diff changeset
58 def delete_user_permission(self, repository, user):
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1589
diff changeset
59 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
60 if current:
1716
7d1fc253549e notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
61 self.sa.delete(current)
1586
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents:
diff changeset
62
1793
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
63 def get_users_group_permission(self, repository, users_group):
3417
fa6ba6727475 further cleanup of UsersGroup
Mads Kiilerich <madski@unity3d.com>
parents: 2522
diff changeset
64 return UserGroupRepoToPerm.query() \
fa6ba6727475 further cleanup of UsersGroup
Mads Kiilerich <madski@unity3d.com>
parents: 2522
diff changeset
65 .filter(UserGroupRepoToPerm.users_group == users_group) \
fa6ba6727475 further cleanup of UsersGroup
Mads Kiilerich <madski@unity3d.com>
parents: 2522
diff changeset
66 .filter(UserGroupRepoToPerm.repository == repository) \
1793
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
67 .scalar()
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
68
1818
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1795
diff changeset
69 def update_users_group_permission(self, repository, users_group,
1793
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
70 permission):
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
71 permission = Permission.get_by_key(permission)
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
72 current = self.get_users_group_permission(repository, users_group)
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
73 if current:
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
74 if not current.permission is permission:
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
75 current.permission = permission
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
76 else:
3417
fa6ba6727475 further cleanup of UsersGroup
Mads Kiilerich <madski@unity3d.com>
parents: 2522
diff changeset
77 p = UserGroupRepoToPerm()
1793
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
78 p.users_group = users_group
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
79 p.repository = repository
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
80 p.permission = permission
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
81 self.sa.add(p)
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
82
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
83 def delete_users_group_permission(self, repository, users_group):
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
84 current = self.get_users_group_permission(repository, users_group)
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
85 if current:
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
86 self.sa.delete(current)
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
87
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1589
diff changeset
88 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
89 if permission:
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1589
diff changeset
90 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
91 else:
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1589
diff changeset
92 self.delete_user_permission(repository, user)
1793
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
93
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
94 def update_or_delete_users_group_permission(self, repository, user_group,
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
95 permission):
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
96 if permission:
631caf880b87 implements #329
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
97 self.update_users_group_permission(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 else:
1818
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1795
diff changeset
100 self.delete_users_group_permission(repository, user_group)