Changeset - 6fdc3ff65fce
[Not reviewed]
beta
0 3 0
Marcin Kuzminski - 15 years ago 2011-02-09 15:16:28
marcin@python-works.com
#56 added assignments of users groups into repository
3 files changed with 35 insertions and 6 deletions:
0 comments (0 inline, 0 general)
rhodecode/model/db.py
Show inline comments
 
@@ -261,21 +261,24 @@ class UserToPerm(Base, BaseModel):
 
    user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
 
    permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
 

	
 
    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'
 
    __table_args__ = (UniqueConstraint('group_id', 'permission_id'), {'useexisting':True})
 

	
 
    group_to_perm_id = Column("group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
rhodecode/model/forms.py
Show inline comments
 
@@ -251,24 +251,26 @@ class ValidPerms(formencode.validators.F
 
                    #means new added member to permissions
 
                    new_perm = value.get('perm_new_member', False)
 
                    new_member = value.get('perm_new_member_name', False)
 
                    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:]
 
                    t = 'user'
 
                    if usr == 'default':
 
                        if value['private']:
 
                            #set none for default when updating to private repo
 
                            v = 'repository.none'
 
                    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:
 
                if t is 'user':
 
                    self.user_db = sa.query(User)\
 
                        .filter(User.active == True)\
 
@@ -455,12 +457,13 @@ def RepoForm(edit=False, old_data={}, su
 
        description = UnicodeString(strip=True, min=1, not_empty=True)
 
        private = StringBoolean(if_missing=False)
 
        enable_statistics = StringBoolean(if_missing=False)
 
        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]
 
    return _RepoForm
 

	
 
def RepoForkForm(edit=False, old_data={}, supported_backends=BACKENDS.keys()):
rhodecode/model/repo.py
Show inline comments
 
@@ -30,14 +30,15 @@ import logging
 
import traceback
 
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
 

	
 
log = logging.getLogger(__name__)
 

	
 
class RepoModel(BaseModel):
 
@@ -102,35 +103,57 @@ class RepoModel(BaseModel):
 
        return users_groups_array
 

	
 
    def update(self, repo_name, form_data):
 
        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']:
 
            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(username))\
 
                            .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)
 
                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']:
 
            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(username, cache=False)
 
                    r2p.user = user_model.get_by_username(member)
 

	
 
                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():
 
                if k == 'user':
 
                    cur_repo.user = user_model.get(v)
 
                else:
0 comments (0 inline, 0 general)