@@ -872,6 +872,18 @@ class UserRepoToPerm(Base, BaseModel):
permission = relationship('Permission')
repository = relationship('Repository')
@classmethod
def create(cls, user, repository, permission):
n = cls()
n.user = user
n.repository = repository
n.permission = permission
Session().add(n)
return n
def __repr__(self):
return '<user:%s => %s >' % (self.user, self.repository)
class UserToPerm(Base, BaseModel):
__tablename__ = 'user_to_perm'
__table_args__ = (UniqueConstraint('user_id', 'permission_id'), {'extend_existing':True})
@@ -930,6 +942,15 @@ class UsersGroupRepoToPerm(Base, BaseMod
def create(cls, users_group, repository, permission):
n.users_group = users_group
return '<userGroup:%s => %s >' % (self.users_group, self.repository)
@@ -244,24 +244,46 @@ class RepoModel(BaseModel):
new_repo.user_id = cur_user.user_id
self.sa.add(new_repo)
#create default permission
repo_to_perm = UserRepoToPerm()
default = 'repository.read'
for p in User.get_by_username('default').user_perms:
if p.permission.permission_name.startswith('repository.'):
default = p.permission.permission_name
break
def _create_default_perms():
# create default permission
default_perm = 'repository.none' if form_data['private'] else default
repo_to_perm.permission_id = self.sa.query(Permission)\
.filter(Permission.permission_name == default_perm)\
.one().permission_id
repo_to_perm.repository = new_repo
repo_to_perm.user_id = User.get_by_username('default').user_id
self.sa.add(repo_to_perm)
if fork:
if form_data.get('copy_permissions'):
repo = Repository.get(fork_parent_id)
user_perms = UserRepoToPerm.query()\
.filter(UserRepoToPerm.repository == repo).all()
group_perms = UsersGroupRepoToPerm.query()\
.filter(UsersGroupRepoToPerm.repository == repo).all()
for perm in user_perms:
UserRepoToPerm.create(perm.user, new_repo,
perm.permission)
for perm in group_perms:
UsersGroupRepoToPerm.create(perm.users_group, new_repo,
else:
_create_default_perms()
if not just_db:
self.__create_repo(repo_name, form_data['repo_type'],
@@ -376,21 +376,21 @@ class UserModel(BaseModel):
#==================================================================
uid = user.user_id
#default global
# default global
default_global_perms = self.sa.query(UserToPerm)\
.filter(UserToPerm.user_id == default_user_id)
for perm in default_global_perms:
user.permissions['global'].add(perm.permission.permission_name)
#default for repositories
# default for repositories
for perm in default_perms:
if perm.Repository.private and not (perm.Repository.user_id ==
uid):
#disable defaults for private repos,
# disable defaults for private repos,
p = 'repository.none'
elif perm.Repository.user_id == uid:
#set admin if owner
# set admin if owner
p = 'repository.admin'
p = perm.Permission.permission_name
@@ -402,16 +402,15 @@ class UserModel(BaseModel):
# overwrite default with user permissions if any
#user global
# user global
user_perms = self.sa.query(UserToPerm)\
.options(joinedload(UserToPerm.permission))\
.filter(UserToPerm.user_id == uid).all()
user.permissions['global'].add(perm.permission.
permission_name)
#user repositories
# user repositories
user_repo_perms = self.sa.query(UserRepoToPerm, Permission,
Repository)\
.join((Repository, UserRepoToPerm.repository_id ==
@@ -84,7 +84,7 @@
</td>
<td>
%if node.is_file():
<span class="tooltip" title="${node.last_changeset.raw_id}">
<span class="tooltip" title="${node.last_changeset.message}">
${'r%s:%s' % (node.last_changeset.revision,node.last_changeset.short_id)}</span>
%endif
Status change: