mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-18 16:36:15 +00:00
performance, funciton name (#1795)
* performance, funciton name * middle * depend with_repos, modify test
This commit is contained in:
@@ -100,7 +100,7 @@ class DirSharedItemsEndpoint(APIView):
|
||||
path, repo_owner)
|
||||
ret = []
|
||||
# change is_admin to True if user in admin groups.
|
||||
admin_groups = ExtraGroupsSharePermission.objects.get_admin_groups(repo_id)
|
||||
admin_groups = ExtraGroupsSharePermission.objects.get_admin_groups_by_repo(repo_id)
|
||||
for item in share_items:
|
||||
ret.append({
|
||||
"share_type": "group",
|
||||
@@ -109,7 +109,7 @@ class DirSharedItemsEndpoint(APIView):
|
||||
"name": seaserv.get_group(item.group_id).group_name,
|
||||
},
|
||||
"permission": item.perm,
|
||||
"is_admin": str(item.group_id) in admin_groups,
|
||||
"is_admin": item.group_id in admin_groups,
|
||||
})
|
||||
return ret
|
||||
|
||||
|
@@ -102,11 +102,13 @@ class Groups(APIView):
|
||||
error_msg = 'with_repos invalid.'
|
||||
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
||||
|
||||
all_group_admin_records = ExtraGroupsSharePermission.objects.get_all_admin_records()
|
||||
all_group_admin_records = [(e.repo_id, e.group_id)for e in all_group_admin_records]
|
||||
groups = []
|
||||
if with_repos:
|
||||
gids = [g.id for g in user_groups]
|
||||
admin_info = ExtraGroupsSharePermission.objects.batch_get_repos_with_admin_permission(gids)
|
||||
|
||||
for g in user_groups:
|
||||
group_info = get_group_info(request, g.id , avatar_size)
|
||||
group_info = get_group_info(request, g.id, avatar_size)
|
||||
|
||||
if with_repos:
|
||||
if org_id:
|
||||
@@ -127,7 +129,7 @@ class Groups(APIView):
|
||||
"permission": r.permission,
|
||||
"owner": r.user,
|
||||
"owner_name": email2nickname(r.user),
|
||||
"is_admin": (str(r.id), str(g.id)) in all_group_admin_records
|
||||
"is_admin": (r.id, g.id) in admin_info
|
||||
}
|
||||
repos.append(repo)
|
||||
|
||||
|
@@ -4019,7 +4019,7 @@ class GroupRepos(APIView):
|
||||
"modifier_email": r.last_modifier,
|
||||
"modifier_contact_email": contact_email_dict.get(r.last_modifier, ''),
|
||||
"modifier_name": nickname_dict.get(r.last_modifier, ''),
|
||||
"is_admin": str(r.id) in admin_repos,
|
||||
"is_admin": r.id in admin_repos,
|
||||
}
|
||||
repos_json.append(repo)
|
||||
|
||||
@@ -4040,7 +4040,6 @@ class GroupRepo(APIView):
|
||||
group_id = group.id
|
||||
|
||||
# only admin or owner can delete share record.
|
||||
groups = [str(e.id) for e in get_groups_by_user(request)]
|
||||
repo_owner = get_repo_owner(request, repo_id)
|
||||
if not group.is_staff and repo_owner != username and not is_repo_admin(username, repo_id):
|
||||
return api_error(status.HTTP_403_FORBIDDEN, 'Permission denied.')
|
||||
|
@@ -192,7 +192,7 @@ class ExtraSharePermissionManager(models.Manager):
|
||||
e.g.
|
||||
in_datas:
|
||||
[(repo_id1, username1), (repo_id2, admin1)]
|
||||
return:
|
||||
admin permission data returnd:
|
||||
[(repo_id2, admin1)]
|
||||
"""
|
||||
if len(in_datas) <= 0:
|
||||
@@ -220,14 +220,6 @@ class ExtraSharePermissionManager(models.Manager):
|
||||
|
||||
|
||||
class ExtraGroupsSharePermissionManager(models.Manager):
|
||||
def get_admin_groups(self, repo_id):
|
||||
""" return admin groups in specific repo
|
||||
e.g: ['23', '12']
|
||||
"""
|
||||
return super(ExtraGroupsSharePermissionManager, self).filter(
|
||||
repo_id=repo_id, permission='admin'
|
||||
).values_list('group_id', flat=True)
|
||||
|
||||
def get_repos_with_admin_permission(self, gid):
|
||||
""" return admin repo in specific group
|
||||
e.g: ['repo_id1', 'repo_id2']
|
||||
@@ -236,10 +228,21 @@ class ExtraGroupsSharePermissionManager(models.Manager):
|
||||
group_id=gid, permission='admin'
|
||||
).values_list('repo_id', flat=True)
|
||||
|
||||
def get_all_admin_records(self):
|
||||
def get_admin_groups_by_repo(self, repo_id):
|
||||
""" return admin groups in specific repo
|
||||
e.g: ['23', '12']
|
||||
"""
|
||||
return super(ExtraGroupsSharePermissionManager, self).filter(
|
||||
permission='admin'
|
||||
)
|
||||
repo_id=repo_id, permission='admin'
|
||||
).values_list('group_id', flat=True)
|
||||
|
||||
def batch_get_repos_with_admin_permission(self, gids):
|
||||
"""
|
||||
"""
|
||||
if len(gids) <= 0:
|
||||
return []
|
||||
db_data = super(ExtraGroupsSharePermissionManager, self).filter(group_id__in=gids, permission=PERMISSION_ADMIN)
|
||||
return [(e.repo_id, e.group_id) for e in db_data]
|
||||
|
||||
def create_share_permission(self, repo_id, gid, permission):
|
||||
self.model(repo_id=repo_id, group_id=gid, permission=permission).save()
|
||||
@@ -257,7 +260,7 @@ class ExtraGroupsSharePermissionManager(models.Manager):
|
||||
|
||||
class ExtraGroupsSharePermission(models.Model):
|
||||
repo_id = models.CharField(max_length=36, db_index=True)
|
||||
group_id = models.CharField(max_length=20, db_index=True)
|
||||
group_id = models.IntegerField(db_index=True)
|
||||
permission = models.CharField(max_length=30)
|
||||
objects = ExtraGroupsSharePermissionManager()
|
||||
|
||||
|
@@ -6,7 +6,7 @@ def is_repo_admin(username, repo_id):
|
||||
is_administrator = ExtraSharePermission.objects.\
|
||||
get_user_permission(repo_id, username) == PERMISSION_ADMIN
|
||||
belong_to_admin_group = False
|
||||
group_ids = ExtraGroupsSharePermission.objects.get_admin_groups(repo_id)
|
||||
group_ids = ExtraGroupsSharePermission.objects.get_admin_groups_by_repo(repo_id)
|
||||
for group_id in group_ids:
|
||||
if is_group_member(group_id, username):
|
||||
belong_to_admin_group = True
|
||||
|
@@ -3,7 +3,6 @@ from seahub.test_utils import BaseTestCase
|
||||
|
||||
from seaserv import seafile_api
|
||||
|
||||
|
||||
class ExtraGroupsSharePermissionTest(BaseTestCase):
|
||||
def test_can_add(self):
|
||||
ExtraGroupsSharePermission.objects.create_share_permission(self.repo.id,
|
||||
@@ -11,14 +10,14 @@ class ExtraGroupsSharePermissionTest(BaseTestCase):
|
||||
'admin')
|
||||
self.assertEqual(1, len(ExtraGroupsSharePermission.objects.all()))
|
||||
|
||||
def test_can_get_admin_groups(self):
|
||||
res = ExtraGroupsSharePermission.objects.get_admin_groups(self.repo.id)
|
||||
def test_can_get_admin_groups_by_repo(self):
|
||||
res = ExtraGroupsSharePermission.objects.get_admin_groups_by_repo(self.repo.id)
|
||||
assert len(res) == 0
|
||||
ExtraGroupsSharePermission.objects.create_share_permission(self.repo.id,
|
||||
self.group.id,
|
||||
'admin')
|
||||
res = ExtraGroupsSharePermission.objects.get_admin_groups(self.repo.id)
|
||||
assert res[0] == str(self.group.id)
|
||||
res = ExtraGroupsSharePermission.objects.get_admin_groups_by_repo(self.repo.id)
|
||||
assert res[0] == self.group.id
|
||||
|
||||
def test_can_get_repos_with_admin_permission(self):
|
||||
res = ExtraGroupsSharePermission.objects.get_repos_with_admin_permission(self.group.id)
|
||||
@@ -27,7 +26,7 @@ class ExtraGroupsSharePermissionTest(BaseTestCase):
|
||||
self.group.id,
|
||||
'admin')
|
||||
res = ExtraGroupsSharePermission.objects.get_repos_with_admin_permission(self.group.id)
|
||||
assert res[0] == str(self.repo.id)
|
||||
assert res[0] == self.repo.id
|
||||
|
||||
def test_can_delete(self):
|
||||
self.assertEqual(0, len(ExtraGroupsSharePermission.objects.all()))
|
||||
@@ -45,3 +44,20 @@ class ExtraGroupsSharePermissionTest(BaseTestCase):
|
||||
self.group.id,
|
||||
'admin')
|
||||
self.assertEqual(1, len(ExtraGroupsSharePermission.objects.all()))
|
||||
|
||||
def test_batch_get_repos_with_admin_permission(self):
|
||||
r = seafile_api.get_repo(self.create_repo(name='repo2',
|
||||
desc='', username=self.user.email, passwd=None))
|
||||
new_group = self.create_group(group_name='test_group',
|
||||
username=self.user.username)
|
||||
data = [self.group.id, new_group.id]
|
||||
self.assertEqual([], ExtraGroupsSharePermission.objects.batch_get_repos_with_admin_permission(data))
|
||||
ExtraGroupsSharePermission.objects.create_share_permission(self.repo.id,
|
||||
self.group.id,
|
||||
'admin')
|
||||
ExtraGroupsSharePermission.objects.create_share_permission(self.repo.id,
|
||||
new_group.id,
|
||||
'admin')
|
||||
res = ExtraGroupsSharePermission.objects.batch_get_repos_with_admin_permission(data)
|
||||
assert (self.repo.id, self.group.id) in res
|
||||
assert (self.repo.id, new_group.id) in res
|
||||
|
Reference in New Issue
Block a user