Show More
@@ -264,15 +264,18 b' class UserToPerm(Base, BaseModel):' | |||||
264 | user = relationship('User') |
|
264 | user = relationship('User') | |
265 | permission = relationship('Permission') |
|
265 | permission = relationship('Permission') | |
266 |
|
266 | |||
|
267 | ||||
267 | class UsersGroupToPerm(Base, BaseModel): |
|
268 | class UsersGroupToPerm(Base, BaseModel): | |
268 | __tablename__ = 'users_group_to_perm' |
|
269 | __tablename__ = 'users_group_to_perm' | |
269 | __table_args__ = (UniqueConstraint('users_group_id', 'permission_id'), {'useexisting':True}) |
|
270 | __table_args__ = (UniqueConstraint('users_group_id', 'permission_id'), {'useexisting':True}) | |
270 | users_group_to_perm_id = Column("users_group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
|
271 | users_group_to_perm_id = Column("users_group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) | |
271 | users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None) |
|
272 | users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None) | |
272 | permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None) |
|
273 | permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None) | |
|
274 | repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=None, default=None) | |||
273 |
|
275 | |||
274 | users_group = relationship('UsersGroup') |
|
276 | users_group = relationship('UsersGroup') | |
275 | permission = relationship('Permission') |
|
277 | permission = relationship('Permission') | |
|
278 | repository = relationship('Repository') | |||
276 |
|
279 | |||
277 | class GroupToPerm(Base, BaseModel): |
|
280 | class GroupToPerm(Base, BaseModel): | |
278 | __tablename__ = 'group_to_perm' |
|
281 | __tablename__ = 'group_to_perm' |
@@ -254,7 +254,7 b' class ValidPerms(formencode.validators.F' | |||||
254 | new_type = value.get('perm_new_member_type') |
|
254 | new_type = value.get('perm_new_member_type') | |
255 |
|
255 | |||
256 | if new_member and new_perm: |
|
256 | if new_member and new_perm: | |
257 | if (new_member, new_perm) not in perms_new: |
|
257 | if (new_member, new_perm, new_type) not in perms_new: | |
258 | perms_new.append((new_member, new_perm, new_type)) |
|
258 | perms_new.append((new_member, new_perm, new_type)) | |
259 | else: |
|
259 | else: | |
260 | usr = k[5:] |
|
260 | usr = k[5:] | |
@@ -266,6 +266,8 b' class ValidPerms(formencode.validators.F' | |||||
266 | perms_update.append((usr, v, t)) |
|
266 | perms_update.append((usr, v, t)) | |
267 | value['perms_updates'] = perms_update |
|
267 | value['perms_updates'] = perms_update | |
268 | value['perms_new'] = perms_new |
|
268 | value['perms_new'] = perms_new | |
|
269 | ||||
|
270 | #update permissions | |||
269 | sa = meta.Session |
|
271 | sa = meta.Session | |
270 | for k, v, t in perms_new: |
|
272 | for k, v, t in perms_new: | |
271 | try: |
|
273 | try: | |
@@ -458,6 +460,7 b' def RepoForm(edit=False, old_data={}, su' | |||||
458 | enable_downloads = StringBoolean(if_missing=False) |
|
460 | enable_downloads = StringBoolean(if_missing=False) | |
459 | repo_type = OneOf(supported_backends) |
|
461 | repo_type = OneOf(supported_backends) | |
460 | if edit: |
|
462 | if edit: | |
|
463 | #this is repo owner | |||
461 | user = All(Int(not_empty=True), ValidRepoUser) |
|
464 | user = All(Int(not_empty=True), ValidRepoUser) | |
462 |
|
465 | |||
463 | chained_validators = [ValidPerms] |
|
466 | chained_validators = [ValidPerms] |
@@ -33,8 +33,9 b' from datetime import datetime' | |||||
33 | from rhodecode.model import BaseModel |
|
33 | from rhodecode.model import BaseModel | |
34 | from rhodecode.model.caching_query import FromCache |
|
34 | from rhodecode.model.caching_query import FromCache | |
35 | from rhodecode.model.db import Repository, RepoToPerm, User, Permission, \ |
|
35 | from rhodecode.model.db import Repository, RepoToPerm, User, Permission, \ | |
36 | Statistics, UsersGroup |
|
36 | Statistics, UsersGroup, UsersGroupToPerm | |
37 | from rhodecode.model.user import UserModel |
|
37 | from rhodecode.model.user import UserModel | |
|
38 | from rhodecode.model.users_group import UsersGroupMember, UsersGroupModel | |||
38 |
|
39 | |||
39 | from vcs.backends import get_backend |
|
40 | from vcs.backends import get_backend | |
40 |
|
41 | |||
@@ -105,29 +106,51 b' class RepoModel(BaseModel):' | |||||
105 | try: |
|
106 | try: | |
106 | cur_repo = self.get_by_repo_name(repo_name, cache=False) |
|
107 | cur_repo = self.get_by_repo_name(repo_name, cache=False) | |
107 | user_model = UserModel(self.sa) |
|
108 | user_model = UserModel(self.sa) | |
|
109 | users_group_model = UsersGroupModel(self.sa) | |||
108 |
|
110 | |||
109 | #update permissions |
|
111 | #update permissions | |
110 |
for |
|
112 | for member, perm, member_type in form_data['perms_updates']: | |
111 | r2p = self.sa.query(RepoToPerm)\ |
|
113 | if member_type == 'user': | |
112 | .filter(RepoToPerm.user == user_model.get_by_username(username))\ |
|
114 | r2p = self.sa.query(RepoToPerm)\ | |
113 |
.filter(RepoToPerm. |
|
115 | .filter(RepoToPerm.user == user_model.get_by_username(member))\ | |
114 | .one() |
|
116 | .filter(RepoToPerm.repository == cur_repo)\ | |
|
117 | .one() | |||
115 |
|
118 | |||
116 | r2p.permission = self.sa.query(Permission)\ |
|
119 | r2p.permission = self.sa.query(Permission)\ | |
117 | .filter(Permission.permission_name == perm)\ |
|
120 | .filter(Permission.permission_name == perm)\ | |
118 | .scalar() |
|
121 | .scalar() | |
119 | self.sa.add(r2p) |
|
122 | self.sa.add(r2p) | |
|
123 | else: | |||
|
124 | g2p = self.sa.query(UsersGroupToPerm)\ | |||
|
125 | .filter(UsersGroupToPerm.users_group == users_group_model.get_by_groupname(member))\ | |||
|
126 | .filter(UsersGroupToPerm.repository == cur_repo)\ | |||
|
127 | .one() | |||
|
128 | ||||
|
129 | g2p.permission = self.sa.query(Permission)\ | |||
|
130 | .filter(Permission.permission_name == perm)\ | |||
|
131 | .scalar() | |||
|
132 | self.sa.add(g2p) | |||
120 |
|
133 | |||
121 | #set new permissions |
|
134 | #set new permissions | |
122 |
for |
|
135 | for member, perm, member_type in form_data['perms_new']: | |
123 |
|
|
136 | if member_type == 'user': | |
124 |
r2p |
|
137 | r2p = RepoToPerm() | |
125 | r2p.user = user_model.get_by_username(username, cache=False) |
|
138 | r2p.repository = cur_repo | |
|
139 | r2p.user = user_model.get_by_username(member) | |||
126 |
|
140 | |||
127 | r2p.permission = self.sa.query(Permission)\ |
|
141 | r2p.permission = self.sa.query(Permission)\ | |
128 | .filter(Permission.permission_name == perm)\ |
|
142 | .filter(Permission.permission_name == perm)\ | |
129 | .scalar() |
|
143 | .scalar() | |
130 | self.sa.add(r2p) |
|
144 | self.sa.add(r2p) | |
|
145 | else: | |||
|
146 | g2p = UsersGroupToPerm() | |||
|
147 | g2p.repository = cur_repo | |||
|
148 | g2p.users_group = users_group_model.get_by_groupname(member) | |||
|
149 | ||||
|
150 | g2p.permission = self.sa.query(Permission)\ | |||
|
151 | .filter(Permission.permission_name == perm)\ | |||
|
152 | .scalar() | |||
|
153 | self.sa.add(g2p) | |||
131 |
|
154 | |||
132 | #update current repo |
|
155 | #update current repo | |
133 | for k, v in form_data.items(): |
|
156 | for k, v in form_data.items(): |
General Comments 0
You need to be logged in to leave comments.
Login now