diff --git a/seahub/templates/js/templates.html b/seahub/templates/js/templates.html
index fc7b12a214..209b154f7f 100644
--- a/seahub/templates/js/templates.html
+++ b/seahub/templates/js/templates.html
@@ -238,7 +238,7 @@
{% trans "Rename" %}
{% trans "Move" %}
{% trans "Copy" %}
- <% if (app.pageOptions.folder_perm_enabled && is_repo_owner) { %>
+ <% if (app.pageOptions.folder_perm_enabled && is_repo_owner && !is_virtual) { %>
{% trans "Permission" %}
<% } %>
{% trans "Open via Client" %}
diff --git a/seahub/views/ajax.py b/seahub/views/ajax.py
index c04576f285..f25249e7de 100644
--- a/seahub/views/ajax.py
+++ b/seahub/views/ajax.py
@@ -1683,10 +1683,15 @@ def set_user_folder_perm(request, repo_id):
return HttpResponse(json.dumps({"error": _('Argument missing')}),
status=400, content_type=content_type)
- if not seafile_api.get_repo(repo_id):
+ repo = seafile_api.get_repo(repo_id)
+ if not repo:
return HttpResponse(json.dumps({"error": _('Library does not exist')}),
status=400, content_type=content_type)
+ if repo.is_virtual:
+ return HttpResponse(json.dumps({"error": _('Permission denied')}),
+ status=403, content_type=content_type)
+
if is_org_context(request):
repo_owner = seafile_api.get_org_repo_owner(repo_id)
else:
@@ -1825,10 +1830,15 @@ def set_group_folder_perm(request, repo_id):
status=400, content_type=content_type)
## check params
- if not seafile_api.get_repo(repo_id):
+ repo = seafile_api.get_repo(repo_id)
+ if not repo:
return HttpResponse(json.dumps({"error": _('Library does not exist')}),
status=400, content_type=content_type)
+ if repo.is_virtual:
+ return HttpResponse(json.dumps({"error": _('Permission denied')}),
+ status=403, content_type=content_type)
+
if is_org_context(request):
repo_owner = seafile_api.get_org_repo_owner(repo_id)
else:
diff --git a/static/scripts/app/views/dirent.js b/static/scripts/app/views/dirent.js
index 7913c3d3c1..f70aa59901 100644
--- a/static/scripts/app/views/dirent.js
+++ b/static/scripts/app/views/dirent.js
@@ -53,6 +53,7 @@ define([
category: dir.category,
repo_id: dir.repo_id,
is_repo_owner: dir.is_repo_owner,
+ is_virtual: dir.is_virtual,
can_generate_share_link: app.pageOptions.can_generate_share_link,
is_pro: is_pro,
file_audit_enabled: file_audit_enabled,