mirror of
https://github.com/haiwen/seahub.git
synced 2025-07-10 13:44:02 +00:00
Merge pull request #3785 from haiwen/dtable_share_update
dtable share update model name and class name
This commit is contained in:
commit
47a23e23b8
@ -29,7 +29,7 @@ from seahub.views.file import send_file_access_msg
|
||||
from seahub.auth.decorators import login_required
|
||||
from seahub.settings import MAX_UPLOAD_FILE_NAME_LEN, SHARE_LINK_EXPIRE_DAYS_MIN, \
|
||||
SHARE_LINK_EXPIRE_DAYS_MAX, SHARE_LINK_EXPIRE_DAYS_DEFAULT
|
||||
from seahub.dtable.utils import check_share_dtable_permission
|
||||
from seahub.dtable.utils import check_dtable_share_permission
|
||||
from seahub.constants import PERMISSION_ADMIN, PERMISSION_READ_WRITE
|
||||
|
||||
|
||||
@ -300,7 +300,7 @@ class DTableView(APIView):
|
||||
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
||||
else:
|
||||
if username != owner and \
|
||||
not check_share_dtable_permission(dtable, username):
|
||||
not check_dtable_share_permission(dtable, username):
|
||||
error_msg = 'Permission denied.'
|
||||
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
||||
|
||||
@ -535,7 +535,7 @@ class DTableUpdateLinkView(APIView):
|
||||
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
||||
else:
|
||||
if username != owner and \
|
||||
check_share_dtable_permission(dtable, username) not in WRITE_PERMISSION_TUPLE:
|
||||
check_dtable_share_permission(dtable, username) not in WRITE_PERMISSION_TUPLE:
|
||||
error_msg = 'Permission denied.'
|
||||
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
||||
|
||||
@ -595,7 +595,7 @@ class DTableAssetUploadLinkView(APIView):
|
||||
username = request.user.username
|
||||
owner = workspace.owner
|
||||
if username != owner and \
|
||||
check_share_dtable_permission(dtable, username) not in WRITE_PERMISSION_TUPLE:
|
||||
check_dtable_share_permission(dtable, username) not in WRITE_PERMISSION_TUPLE:
|
||||
error_msg = 'Permission denied.'
|
||||
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
||||
|
||||
@ -663,7 +663,7 @@ def dtable_file_view(request, workspace_id, name):
|
||||
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
||||
else:
|
||||
if username != owner and \
|
||||
not check_share_dtable_permission(dtable, username):
|
||||
not check_dtable_share_permission(dtable, username):
|
||||
error_msg = 'Permission denied.'
|
||||
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
||||
|
||||
@ -719,7 +719,7 @@ def dtable_asset_access(request, workspace_id, dtable_id, path):
|
||||
username = request.user.username
|
||||
owner = workspace.owner
|
||||
if username != owner and \
|
||||
check_share_dtable_permission(dtable, username) not in WRITE_PERMISSION_TUPLE:
|
||||
check_dtable_share_permission(dtable, username) not in WRITE_PERMISSION_TUPLE:
|
||||
return render_permission_error(request, 'Permission denied.')
|
||||
|
||||
token = seafile_api.get_fileserver_access_token(repo_id, asset_id, 'view',
|
||||
|
@ -14,7 +14,7 @@ from seahub.base.accounts import User
|
||||
from seahub.api2.authentication import TokenAuthentication
|
||||
from seahub.api2.throttling import UserRateThrottle
|
||||
from seahub.api2.utils import api_error, get_user_common_info
|
||||
from seahub.dtable.models import Workspaces, DTables, ShareDTable
|
||||
from seahub.dtable.models import Workspaces, DTables, DTableShare
|
||||
from seahub.base.templatetags.seahub_tags import email2nickname
|
||||
from seahub.utils import is_valid_username, is_org_context
|
||||
from seahub.api2.endpoints.utils import is_org_user
|
||||
@ -31,18 +31,18 @@ permission_tuple = (PERMISSION_ADMIN, PERMISSION_PREVIEW, PERMISSION_PREVIEW_EDI
|
||||
GROUP_DOMAIN = '@seafile_group'
|
||||
|
||||
|
||||
class ShareDTablesView(APIView):
|
||||
class SharedDTablesView(APIView):
|
||||
authentication_classes = (TokenAuthentication, SessionAuthentication)
|
||||
permission_classes = (IsAuthenticated,)
|
||||
throttle_classes = (UserRateThrottle,)
|
||||
|
||||
def get(self, request):
|
||||
"""get dtables from share
|
||||
"""list dtables from shared
|
||||
"""
|
||||
to_user = request.user.username
|
||||
|
||||
try:
|
||||
share_queryset = ShareDTable.objects.list_by_to_user(to_user)
|
||||
share_queryset = DTableShare.objects.list_by_to_user(to_user)
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
error_msg = 'Internal Server Error.'
|
||||
@ -73,7 +73,7 @@ class ShareDTablesView(APIView):
|
||||
return Response({'table_list': table_list})
|
||||
|
||||
|
||||
class ShareDTableView(APIView):
|
||||
class DTableShareView(APIView):
|
||||
authentication_classes = (TokenAuthentication, SessionAuthentication)
|
||||
permission_classes = (IsAuthenticated,)
|
||||
throttle_classes = (UserRateThrottle,)
|
||||
@ -148,12 +148,12 @@ class ShareDTableView(APIView):
|
||||
|
||||
# main
|
||||
try:
|
||||
obj = ShareDTable.objects.get_by_dtable_and_to_user(dtable, to_user)
|
||||
obj = DTableShare.objects.get_by_dtable_and_to_user(dtable, to_user)
|
||||
if obj:
|
||||
error_msg = 'table %s already shared to %s.' % (table_name, to_user)
|
||||
return api_error(status.HTTP_409_CONFLICT, error_msg)
|
||||
|
||||
ShareDTable.objects.add(dtable, from_user, to_user, permission)
|
||||
DTableShare.objects.add(dtable, from_user, to_user, permission)
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
error_msg = 'Internal Server Error.'
|
||||
@ -162,7 +162,7 @@ class ShareDTableView(APIView):
|
||||
return Response({"success": True}, status=status.HTTP_201_CREATED)
|
||||
|
||||
def get(self, request, workspace_id, name):
|
||||
"""list share users in share dtable
|
||||
"""list share users in dtable share
|
||||
"""
|
||||
from_user = request.user.username
|
||||
table_name = name
|
||||
@ -198,7 +198,7 @@ class ShareDTableView(APIView):
|
||||
|
||||
# main
|
||||
try:
|
||||
share_queryset = ShareDTable.objects.list_by_dtable(dtable)
|
||||
share_queryset = DTableShare.objects.list_by_dtable(dtable)
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
error_msg = 'Internal Server Error.'
|
||||
@ -213,7 +213,7 @@ class ShareDTableView(APIView):
|
||||
return Response({"user_list": user_list})
|
||||
|
||||
def put(self, request, workspace_id, name):
|
||||
"""modify share dtable permission
|
||||
"""modify dtable share permission
|
||||
"""
|
||||
from_user = request.user.username
|
||||
table_name = name
|
||||
@ -270,7 +270,7 @@ class ShareDTableView(APIView):
|
||||
|
||||
# main
|
||||
try:
|
||||
obj = ShareDTable.objects.get_by_dtable_and_to_user(dtable, to_user)
|
||||
obj = DTableShare.objects.get_by_dtable_and_to_user(dtable, to_user)
|
||||
if not obj:
|
||||
error_msg = 'table %s not shared to %s.' % (table_name, to_user)
|
||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||
@ -331,7 +331,7 @@ class ShareDTableView(APIView):
|
||||
|
||||
# main
|
||||
try:
|
||||
obj = ShareDTable.objects.get_by_dtable_and_to_user(dtable, to_user)
|
||||
obj = DTableShare.objects.get_by_dtable_and_to_user(dtable, to_user)
|
||||
if not obj:
|
||||
error_msg = 'table %s not shared to %s.' % (table_name, to_user)
|
||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||
|
@ -1,5 +1,5 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.15 on 2019-06-26 02:29
|
||||
# Generated by Django 1.11.15 on 2019-07-02 05:20
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
@ -14,7 +14,7 @@ class Migration(migrations.Migration):
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='ShareDTable',
|
||||
name='DTableShare',
|
||||
fields=[
|
||||
('id', models.BigAutoField(primary_key=True, serialize=False)),
|
||||
('from_user', models.CharField(db_index=True, max_length=255)),
|
||||
@ -23,11 +23,11 @@ class Migration(migrations.Migration):
|
||||
('dtable', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='dtable.DTables')),
|
||||
],
|
||||
options={
|
||||
'db_table': 'share_dtable',
|
||||
'db_table': 'dtable_share',
|
||||
},
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='sharedtable',
|
||||
name='dtableshare',
|
||||
unique_together=set([('dtable', 'to_user')]),
|
||||
),
|
||||
]
|
||||
|
@ -152,7 +152,7 @@ class DTables(models.Model):
|
||||
}
|
||||
|
||||
|
||||
class ShareDTableManager(models.Manager):
|
||||
class DTableShareManager(models.Manager):
|
||||
|
||||
def list_by_dtable(self, dtable):
|
||||
return self.filter(dtable=dtable)
|
||||
@ -173,8 +173,8 @@ class ShareDTableManager(models.Manager):
|
||||
return obj
|
||||
|
||||
|
||||
class ShareDTable(models.Model):
|
||||
"""Model used to share dtable
|
||||
class DTableShare(models.Model):
|
||||
"""Model used to dtable share
|
||||
|
||||
from_user, to_user: user email or group_id@seafile_group
|
||||
"""
|
||||
@ -184,8 +184,8 @@ class ShareDTable(models.Model):
|
||||
to_user = models.CharField(max_length=255, db_index=True)
|
||||
permission = models.CharField(max_length=15)
|
||||
|
||||
objects = ShareDTableManager()
|
||||
objects = DTableShareManager()
|
||||
|
||||
class Meta:
|
||||
unique_together = (('dtable', 'to_user'),)
|
||||
db_table = 'share_dtable'
|
||||
db_table = 'dtable_share'
|
||||
|
@ -1,8 +1,8 @@
|
||||
from seahub.dtable.models import ShareDTable
|
||||
from seahub.dtable.models import DTableShare
|
||||
|
||||
|
||||
def check_share_dtable_permission(dtable, to_user):
|
||||
share_dtable_obj = ShareDTable.objects.get_by_dtable_and_to_user(dtable, to_user)
|
||||
def check_dtable_share_permission(dtable, to_user):
|
||||
share_dtable_obj = DTableShare.objects.get_by_dtable_and_to_user(dtable, to_user)
|
||||
if share_dtable_obj:
|
||||
return share_dtable_obj.permission
|
||||
|
||||
|
@ -91,7 +91,7 @@ from seahub.api2.endpoints.starred_items import StarredItems
|
||||
from seahub.api2.endpoints.markdown_lint import MarkdownLintView
|
||||
from seahub.api2.endpoints.dtable import WorkspacesView, DTableView, DTablesView, \
|
||||
DTableUpdateLinkView, DTableAssetUploadLinkView, dtable_file_view, dtable_asset_access
|
||||
from seahub.dtable.api import ShareDTablesView, ShareDTableView
|
||||
from seahub.dtable.api import SharedDTablesView, DTableShareView
|
||||
|
||||
# Admin
|
||||
from seahub.api2.endpoints.admin.revision_tag import AdminTaggedItemsView
|
||||
@ -374,8 +374,8 @@ urlpatterns = [
|
||||
url(r'^api/v2.1/workspace/(?P<workspace_id>\d+)/dtable-asset-upload-link/$', DTableAssetUploadLinkView.as_view(), name='api-v2.1-workspace-dtable-asset-upload-link'),
|
||||
url(r'^workspace/(?P<workspace_id>\d+)/dtable/(?P<name>.*)/$', dtable_file_view, name='dtable-file-view'),
|
||||
url(r'^workspace/(?P<workspace_id>\d+)/asset/(?P<dtable_id>[-0-9a-f]{36})/(?P<path>.*)$', dtable_asset_access, name='dtable-asset-access'),
|
||||
url(r'^api/v2.1/dtables/shared/$', ShareDTablesView.as_view(), name='api-v2.1-dtables-share'),
|
||||
url(r'^api/v2.1/workspace/(?P<workspace_id>\d+)/dtable/(?P<name>.*)/share/$', ShareDTableView.as_view(), name='api-v2.1-dtable-share'),
|
||||
url(r'^api/v2.1/dtables/shared/$', SharedDTablesView.as_view(), name='api-v2.1-dtables-share'),
|
||||
url(r'^api/v2.1/workspace/(?P<workspace_id>\d+)/dtable/(?P<name>.*)/share/$', DTableShareView.as_view(), name='api-v2.1-dtable-share'),
|
||||
|
||||
# Deprecated
|
||||
url(r'^api/v2.1/repos/(?P<repo_id>[-0-9a-f]{36})/tags/$', FileTagsView.as_view(), name="api-v2.1-filetags-view"),
|
||||
|
@ -1,7 +1,7 @@
|
||||
import json
|
||||
|
||||
from django.core.urlresolvers import reverse
|
||||
from seahub.dtable.models import Workspaces, ShareDTable, DTables
|
||||
from seahub.dtable.models import Workspaces, DTableShare, DTables
|
||||
from seaserv import seafile_api
|
||||
|
||||
from seahub.test_utils import BaseTestCase
|
||||
@ -14,7 +14,7 @@ except ImportError:
|
||||
LOCAL_PRO_DEV_ENV = False
|
||||
|
||||
|
||||
class ShareDTablesViewTest(BaseTestCase):
|
||||
class SharedDTablesViewTest(BaseTestCase):
|
||||
def setUp(self):
|
||||
# create workspace
|
||||
self.workspace = Workspaces.objects.create_workspace(
|
||||
@ -27,9 +27,9 @@ class ShareDTablesViewTest(BaseTestCase):
|
||||
self.user.username, self.workspace, 'dtable1')
|
||||
assert len(DTables.objects.all()) == 1
|
||||
# share dtable to admin
|
||||
ShareDTable.objects.add(
|
||||
DTableShare.objects.add(
|
||||
self.dtable, self.user.username, self.admin.username, 'rw')
|
||||
assert len(ShareDTable.objects.all()) == 1
|
||||
assert len(DTableShare.objects.all()) == 1
|
||||
|
||||
self.url = reverse('api-v2.1-dtables-share')
|
||||
|
||||
@ -61,7 +61,7 @@ class ShareDTablesViewTest(BaseTestCase):
|
||||
assert json_resp['table_list'][0]['name'] == 'dtable1'
|
||||
|
||||
|
||||
class ShareDTableViewTest(BaseTestCase):
|
||||
class DTableShareViewTest(BaseTestCase):
|
||||
def setUp(self):
|
||||
# create workspace
|
||||
self.workspace = Workspaces.objects.create_workspace(
|
||||
@ -74,9 +74,9 @@ class ShareDTableViewTest(BaseTestCase):
|
||||
self.user.username, self.workspace, 'dtable1')
|
||||
assert len(DTables.objects.all()) == 1
|
||||
# share dtable to admin
|
||||
ShareDTable.objects.add(
|
||||
DTableShare.objects.add(
|
||||
self.dtable, self.user.username, self.admin.username, 'rw')
|
||||
assert len(ShareDTable.objects.all()) == 1
|
||||
assert len(DTableShare.objects.all()) == 1
|
||||
|
||||
self.url = reverse('api-v2.1-dtable-share', args=[self.workspace.id, self.dtable.name])
|
||||
|
||||
@ -88,9 +88,9 @@ class ShareDTableViewTest(BaseTestCase):
|
||||
self.remove_repo()
|
||||
|
||||
def test_can_post(self):
|
||||
assert len(ShareDTable.objects.all()) == 1
|
||||
ShareDTable.objects.all().delete()
|
||||
assert len(ShareDTable.objects.all()) == 0
|
||||
assert len(DTableShare.objects.all()) == 1
|
||||
DTableShare.objects.all().delete()
|
||||
assert len(DTableShare.objects.all()) == 0
|
||||
|
||||
self.login_as(self.user)
|
||||
|
||||
@ -100,10 +100,10 @@ class ShareDTableViewTest(BaseTestCase):
|
||||
}
|
||||
resp = self.client.post(self.url, data)
|
||||
self.assertEqual(201, resp.status_code)
|
||||
assert len(ShareDTable.objects.all()) == 1
|
||||
assert len(DTableShare.objects.all()) == 1
|
||||
|
||||
def test_can_not_post_with_already_share(self):
|
||||
assert len(ShareDTable.objects.all()) == 1
|
||||
assert len(DTableShare.objects.all()) == 1
|
||||
|
||||
self.login_as(self.user)
|
||||
|
||||
@ -115,9 +115,9 @@ class ShareDTableViewTest(BaseTestCase):
|
||||
self.assertEqual(409, resp.status_code)
|
||||
|
||||
def test_can_not_post_with_not_owner(self):
|
||||
assert len(ShareDTable.objects.all()) == 1
|
||||
ShareDTable.objects.all().delete()
|
||||
assert len(ShareDTable.objects.all()) == 0
|
||||
assert len(DTableShare.objects.all()) == 1
|
||||
DTableShare.objects.all().delete()
|
||||
assert len(DTableShare.objects.all()) == 0
|
||||
|
||||
self.login_as(self.admin)
|
||||
|
||||
@ -129,9 +129,9 @@ class ShareDTableViewTest(BaseTestCase):
|
||||
self.assertEqual(403, resp.status_code)
|
||||
|
||||
def test_can_not_post_with_share_to_owner(self):
|
||||
assert len(ShareDTable.objects.all()) == 1
|
||||
ShareDTable.objects.all().delete()
|
||||
assert len(ShareDTable.objects.all()) == 0
|
||||
assert len(DTableShare.objects.all()) == 1
|
||||
DTableShare.objects.all().delete()
|
||||
assert len(DTableShare.objects.all()) == 0
|
||||
|
||||
self.login_as(self.user)
|
||||
|
||||
@ -146,9 +146,9 @@ class ShareDTableViewTest(BaseTestCase):
|
||||
if not LOCAL_PRO_DEV_ENV:
|
||||
return
|
||||
|
||||
assert len(ShareDTable.objects.all()) == 1
|
||||
ShareDTable.objects.all().delete()
|
||||
assert len(ShareDTable.objects.all()) == 0
|
||||
assert len(DTableShare.objects.all()) == 1
|
||||
DTableShare.objects.all().delete()
|
||||
assert len(DTableShare.objects.all()) == 0
|
||||
|
||||
self.login_as(self.user)
|
||||
|
||||
@ -190,13 +190,13 @@ class ShareDTableViewTest(BaseTestCase):
|
||||
resp = self.client.put(self.url, json.dumps(data), 'application/json')
|
||||
self.assertEqual(200, resp.status_code)
|
||||
|
||||
assert ShareDTable.objects.get_by_dtable_and_to_user(
|
||||
assert DTableShare.objects.get_by_dtable_and_to_user(
|
||||
self.dtable, self.admin.username).permission == 'r'
|
||||
|
||||
def test_can_not_put_with_not_shared(self):
|
||||
assert len(ShareDTable.objects.all()) == 1
|
||||
ShareDTable.objects.all().delete()
|
||||
assert len(ShareDTable.objects.all()) == 0
|
||||
assert len(DTableShare.objects.all()) == 1
|
||||
DTableShare.objects.all().delete()
|
||||
assert len(DTableShare.objects.all()) == 0
|
||||
|
||||
self.login_as(self.user)
|
||||
|
||||
@ -235,7 +235,7 @@ class ShareDTableViewTest(BaseTestCase):
|
||||
}
|
||||
resp = self.client.delete(self.url, json.dumps(data), 'application/json')
|
||||
self.assertEqual(200, resp.status_code)
|
||||
assert len(ShareDTable.objects.all()) == 0
|
||||
assert len(DTableShare.objects.all()) == 0
|
||||
|
||||
def test_can_delete_with_share_user(self):
|
||||
self.login_as(self.admin)
|
||||
@ -245,12 +245,12 @@ class ShareDTableViewTest(BaseTestCase):
|
||||
}
|
||||
resp = self.client.delete(self.url, json.dumps(data), 'application/json')
|
||||
self.assertEqual(200, resp.status_code)
|
||||
assert len(ShareDTable.objects.all()) == 0
|
||||
assert len(DTableShare.objects.all()) == 0
|
||||
|
||||
def test_can_not_delete_with_not_shared(self):
|
||||
assert len(ShareDTable.objects.all()) == 1
|
||||
ShareDTable.objects.all().delete()
|
||||
assert len(ShareDTable.objects.all()) == 0
|
||||
assert len(DTableShare.objects.all()) == 1
|
||||
DTableShare.objects.all().delete()
|
||||
assert len(DTableShare.objects.all()) == 0
|
||||
|
||||
self.login_as(self.user)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user