1
0
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:
Daniel Pan 2019-07-02 13:59:56 +08:00 committed by GitHub
commit 47a23e23b8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 63 additions and 63 deletions

View File

@ -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',

View File

@ -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)

View File

@ -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')]),
),
]

View File

@ -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'

View File

@ -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

View File

@ -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"),

View File

@ -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)