changeset 1014:6fdc3ff65fce beta

#56 added assignments of users groups into repository
author Marcin Kuzminski <marcin@python-works.com>
date Wed, 09 Feb 2011 15:16:28 +0100
parents d2a840b29858
children 65129c332d37
files rhodecode/model/db.py rhodecode/model/forms.py rhodecode/model/repo.py
diffstat 3 files changed, 48 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- 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'
--- 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]
--- 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():