# HG changeset patch # User Marcin Kuzminski # Date 1297260988 -3600 # Node ID 6fdc3ff65fcee5df2de345ca0dddfcbed3954907 # Parent d2a840b29858b5e81675a797692237359e273379 #56 added assignments of users groups into repository diff -r d2a840b29858 -r 6fdc3ff65fce rhodecode/model/db.py --- a/rhodecode/model/db.py Wed Feb 09 03:14:59 2011 +0100 +++ b/rhodecode/model/db.py Wed Feb 09 15:16:28 2011 +0100 @@ -264,15 +264,18 @@ 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') permission = relationship('Permission') + repository = relationship('Repository') class GroupToPerm(Base, BaseModel): __tablename__ = 'group_to_perm' diff -r d2a840b29858 -r 6fdc3ff65fce rhodecode/model/forms.py --- a/rhodecode/model/forms.py Wed Feb 09 03:14:59 2011 +0100 +++ b/rhodecode/model/forms.py Wed Feb 09 15:16:28 2011 +0100 @@ -254,7 +254,7 @@ 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 @@ 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 @@ 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] diff -r d2a840b29858 -r 6fdc3ff65fce rhodecode/model/repo.py --- a/rhodecode/model/repo.py Wed Feb 09 03:14:59 2011 +0100 +++ b/rhodecode/model/repo.py Wed Feb 09 15:16:28 2011 +0100 @@ -33,8 +33,9 @@ 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 @@ try: cur_repo = self.get_by_repo_name(repo_name, cache=False) user_model = UserModel(self.sa) + users_group_model = UsersGroupModel(self.sa) #update permissions - 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': + r2p = self.sa.query(RepoToPerm)\ + .filter(RepoToPerm.user == user_model.get_by_username(member))\ + .filter(RepoToPerm.repository == cur_repo)\ + .one() - r2p.permission = self.sa.query(Permission)\ - .filter(Permission.permission_name == perm)\ - .scalar() - self.sa.add(r2p) + r2p.permission = self.sa.query(Permission)\ + .filter(Permission.permission_name == perm)\ + .scalar() + self.sa.add(r2p) + else: + g2p = self.sa.query(UsersGroupToPerm)\ + .filter(UsersGroupToPerm.users_group == users_group_model.get_by_groupname(member))\ + .filter(UsersGroupToPerm.repository == cur_repo)\ + .one() + + g2p.permission = self.sa.query(Permission)\ + .filter(Permission.permission_name == perm)\ + .scalar() + 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']: + if member_type == 'user': + r2p = RepoToPerm() + r2p.repository = cur_repo + r2p.user = user_model.get_by_username(member) - r2p.permission = self.sa.query(Permission)\ - .filter(Permission.permission_name == perm)\ - .scalar() - self.sa.add(r2p) + r2p.permission = self.sa.query(Permission)\ + .filter(Permission.permission_name == perm)\ + .scalar() + self.sa.add(r2p) + else: + g2p = UsersGroupToPerm() + g2p.repository = cur_repo + g2p.users_group = users_group_model.get_by_groupname(member) + + g2p.permission = self.sa.query(Permission)\ + .filter(Permission.permission_name == perm)\ + .scalar() + self.sa.add(g2p) #update current repo for k, v in form_data.items():