@@ -264,15 +264,18 @@ class UserToPerm(Base, BaseModel):
user = relationship('User')
permission = relationship('Permission')
class UsersGroupToPerm(Base, BaseModel):
__tablename__ = 'users_group_to_perm'
__table_args__ = (UniqueConstraint('users_group_id', 'permission_id'), {'useexisting':True})
users_group_to_perm_id = Column("users_group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None)
permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=None, default=None)
users_group = relationship('UsersGroup')
repository = relationship('Repository')
class GroupToPerm(Base, BaseModel):
__tablename__ = 'group_to_perm'
@@ -254,7 +254,7 @@ class ValidPerms(formencode.validators.F
new_type = value.get('perm_new_member_type')
if new_member and new_perm:
if (new_member, new_perm) not in perms_new:
if (new_member, new_perm, new_type) not in perms_new:
perms_new.append((new_member, new_perm, new_type))
else:
usr = k[5:]
@@ -266,6 +266,8 @@ class ValidPerms(formencode.validators.F
perms_update.append((usr, v, t))
value['perms_updates'] = perms_update
value['perms_new'] = perms_new
#update permissions
sa = meta.Session
for k, v, t in perms_new:
try:
@@ -458,6 +460,7 @@ def RepoForm(edit=False, old_data={}, su
enable_downloads = StringBoolean(if_missing=False)
repo_type = OneOf(supported_backends)
if edit:
#this is repo owner
user = All(Int(not_empty=True), ValidRepoUser)
chained_validators = [ValidPerms]
@@ -33,8 +33,9 @@ from datetime import datetime
from rhodecode.model import BaseModel
from rhodecode.model.caching_query import FromCache
from rhodecode.model.db import Repository, RepoToPerm, User, Permission, \
Statistics, UsersGroup
Statistics, UsersGroup, UsersGroupToPerm
from rhodecode.model.user import UserModel
from rhodecode.model.users_group import UsersGroupMember, UsersGroupModel
from vcs.backends import get_backend
@@ -105,29 +106,51 @@ class RepoModel(BaseModel):
cur_repo = self.get_by_repo_name(repo_name, cache=False)
user_model = UserModel(self.sa)
users_group_model = UsersGroupModel(self.sa)
for username, perm, member_type in form_data['perms_updates']:
r2p = self.sa.query(RepoToPerm)\
.filter(RepoToPerm.user == user_model.get_by_username(username))\
.filter(RepoToPerm.repository == cur_repo)\
.one()
for member, perm, member_type in form_data['perms_updates']:
if member_type == 'user':
.filter(RepoToPerm.user == user_model.get_by_username(member))\
r2p.permission = self.sa.query(Permission)\
.filter(Permission.permission_name == perm)\
.scalar()
self.sa.add(r2p)
g2p = self.sa.query(UsersGroupToPerm)\
.filter(UsersGroupToPerm.users_group == users_group_model.get_by_groupname(member))\
.filter(UsersGroupToPerm.repository == cur_repo)\
g2p.permission = self.sa.query(Permission)\
self.sa.add(g2p)
#set new permissions
for username, perm, member_type in form_data['perms_new']:
r2p = RepoToPerm()
r2p.repository = cur_repo
r2p.user = user_model.get_by_username(username, cache=False)
for member, perm, member_type in form_data['perms_new']:
r2p.user = user_model.get_by_username(member)
g2p = UsersGroupToPerm()
g2p.repository = cur_repo
g2p.users_group = users_group_model.get_by_groupname(member)
#update current repo
for k, v in form_data.items():
Status change: