mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-05 17:02:47 +00:00
[folder perm] enable add perm for multi users & groups
This commit is contained in:
@@ -622,7 +622,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
<tr id="add-user-folder-perm">
|
<tr id="add-user-folder-perm">
|
||||||
<td>
|
<td>
|
||||||
<input name="email" placeholder="{% trans 'Enter or select one' %}" class="w100" />
|
<input name="email" placeholder="{% trans 'Enter emails, or select' %}" class="w100" />
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<select name="permission" class="perm-select w100">
|
<select name="permission" class="perm-select w100">
|
||||||
@@ -644,7 +644,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
<tr id="add-group-folder-perm">
|
<tr id="add-group-folder-perm">
|
||||||
<td>
|
<td>
|
||||||
<select name="group" placeholder="{% trans 'Select one' %}" class="w100" multiple="multiple"></select>
|
<select name="group" placeholder="{% trans 'Select' %}" class="w100" multiple="multiple"></select>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<select name="permission" class="perm-select w100">
|
<select name="permission" class="perm-select w100">
|
||||||
|
@@ -37,7 +37,7 @@ from seahub.signals import upload_file_successful, repo_created, repo_deleted
|
|||||||
from seahub.views import get_repo_dirents_with_perm, validate_owner, \
|
from seahub.views import get_repo_dirents_with_perm, validate_owner, \
|
||||||
check_repo_access_permission, get_unencry_rw_repos_by_user, \
|
check_repo_access_permission, get_unencry_rw_repos_by_user, \
|
||||||
get_system_default_repo_id, get_diff, group_events_data, \
|
get_system_default_repo_id, get_diff, group_events_data, \
|
||||||
get_owned_repo_list, check_folder_permission
|
get_owned_repo_list, check_folder_permission, is_registered_user
|
||||||
from seahub.views.repo import get_nav_path, get_fileshare, get_dir_share_link, \
|
from seahub.views.repo import get_nav_path, get_fileshare, get_dir_share_link, \
|
||||||
get_uploadlink, get_dir_shared_upload_link
|
get_uploadlink, get_dir_shared_upload_link
|
||||||
from seahub.views.modules import get_enabled_mods_by_group, \
|
from seahub.views.modules import get_enabled_mods_by_group, \
|
||||||
@@ -2300,6 +2300,9 @@ def set_user_folder_perm(request, repo_id):
|
|||||||
return HttpResponse(json.dumps({"error": _('Argument missing')}),
|
return HttpResponse(json.dumps({"error": _('Argument missing')}),
|
||||||
status=400, content_type=content_type)
|
status=400, content_type=content_type)
|
||||||
|
|
||||||
|
if op_type == 'add':
|
||||||
|
return add_user_folder_perm(request, repo_id, user, path, perm)
|
||||||
|
|
||||||
result = check_user_folder_perm_args(request.user.username, repo_id, path, user, perm)
|
result = check_user_folder_perm_args(request.user.username, repo_id, path, user, perm)
|
||||||
if 'error' in result:
|
if 'error' in result:
|
||||||
return HttpResponse(json.dumps(result), status=result['status'],
|
return HttpResponse(json.dumps(result), status=result['status'],
|
||||||
@@ -2307,24 +2310,6 @@ def set_user_folder_perm(request, repo_id):
|
|||||||
|
|
||||||
user_folder_perm = seafile_api.get_folder_user_perm(repo_id, path, user)
|
user_folder_perm = seafile_api.get_folder_user_perm(repo_id, path, user)
|
||||||
|
|
||||||
if op_type == 'add':
|
|
||||||
if not user_folder_perm:
|
|
||||||
try:
|
|
||||||
seafile_api.add_folder_user_perm(repo_id, path, perm, user)
|
|
||||||
send_perm_audit_msg('add-repo-perm', request.user.username,
|
|
||||||
user, repo_id, path, perm)
|
|
||||||
return HttpResponse(json.dumps({
|
|
||||||
'user': user,
|
|
||||||
'user_name': email2nickname(user)
|
|
||||||
}),content_type=content_type)
|
|
||||||
except SearpcError as e:
|
|
||||||
logger.error(e)
|
|
||||||
return HttpResponse(json.dumps({"error": _('Operation failed')}),
|
|
||||||
status=500, content_type=content_type)
|
|
||||||
else:
|
|
||||||
return HttpResponse(json.dumps({"error": _('Already add this folder permission')}),
|
|
||||||
status=400, content_type=content_type)
|
|
||||||
|
|
||||||
if op_type == 'modify':
|
if op_type == 'modify':
|
||||||
if user_folder_perm and user_folder_perm != perm:
|
if user_folder_perm and user_folder_perm != perm:
|
||||||
try:
|
try:
|
||||||
@@ -2353,8 +2338,56 @@ def set_user_folder_perm(request, repo_id):
|
|||||||
return HttpResponse(json.dumps({"error": _('Please add folder permission first')}),
|
return HttpResponse(json.dumps({"error": _('Please add folder permission first')}),
|
||||||
status=400, content_type=content_type)
|
status=400, content_type=content_type)
|
||||||
|
|
||||||
return HttpResponse(json.dumps({'success': True}),
|
return HttpResponse(json.dumps({'success': True}), content_type=content_type)
|
||||||
content_type=content_type)
|
|
||||||
|
def add_user_folder_perm(request, repo_id, users, path, perm):
|
||||||
|
"""
|
||||||
|
Add folder permission for user(s)
|
||||||
|
"""
|
||||||
|
content_type = 'application/json; charset=utf-8'
|
||||||
|
|
||||||
|
emails = users.split(',')
|
||||||
|
|
||||||
|
success, failed = [], []
|
||||||
|
|
||||||
|
for user in [e.strip() for e in emails if e.strip()]:
|
||||||
|
if not is_valid_username(user):
|
||||||
|
failed.append(user)
|
||||||
|
continue
|
||||||
|
|
||||||
|
if not is_registered_user(user):
|
||||||
|
failed.append(user)
|
||||||
|
continue
|
||||||
|
|
||||||
|
result = check_user_folder_perm_args(request.user.username, repo_id, path, user, perm)
|
||||||
|
if 'error' in result:
|
||||||
|
return HttpResponse(json.dumps(result), status=result['status'],
|
||||||
|
content_type=content_type)
|
||||||
|
|
||||||
|
user_folder_perm = seafile_api.get_folder_user_perm(repo_id, path, user)
|
||||||
|
|
||||||
|
if user_folder_perm:
|
||||||
|
# Already add this folder permission
|
||||||
|
continue
|
||||||
|
|
||||||
|
try:
|
||||||
|
seafile_api.add_folder_user_perm(repo_id, path, perm, user)
|
||||||
|
send_perm_audit_msg('add-repo-perm', request.user.username,
|
||||||
|
user, repo_id, path, perm)
|
||||||
|
success.append({
|
||||||
|
'user': user,
|
||||||
|
'user_name': email2nickname(user)
|
||||||
|
})
|
||||||
|
except SearpcError as e:
|
||||||
|
logger.error(e)
|
||||||
|
failed.append(user)
|
||||||
|
|
||||||
|
if len(success) > 0:
|
||||||
|
data = json.dumps({"success": success, "failed": failed})
|
||||||
|
return HttpResponse(data, content_type=content_type)
|
||||||
|
else:
|
||||||
|
data = json.dumps({"error": _("Please check the email(s) you entered")})
|
||||||
|
return HttpResponse(data, status=400, content_type=content_type)
|
||||||
|
|
||||||
@login_required_ajax
|
@login_required_ajax
|
||||||
def set_group_folder_perm(request, repo_id):
|
def set_group_folder_perm(request, repo_id):
|
||||||
@@ -2380,6 +2413,9 @@ def set_group_folder_perm(request, repo_id):
|
|||||||
return HttpResponse(json.dumps({"error": _('Argument missing')}),
|
return HttpResponse(json.dumps({"error": _('Argument missing')}),
|
||||||
status=400, content_type=content_type)
|
status=400, content_type=content_type)
|
||||||
|
|
||||||
|
if op_type == 'add':
|
||||||
|
return add_group_folder_perm(request, repo_id, group_id, path, perm)
|
||||||
|
|
||||||
group_id = int(group_id)
|
group_id = int(group_id)
|
||||||
result = check_group_folder_perm_args(request.user.username, repo_id, path, group_id, perm)
|
result = check_group_folder_perm_args(request.user.username, repo_id, path, group_id, perm)
|
||||||
if 'error' in result:
|
if 'error' in result:
|
||||||
@@ -2388,20 +2424,6 @@ def set_group_folder_perm(request, repo_id):
|
|||||||
|
|
||||||
group_folder_perm = seafile_api.get_folder_group_perm(repo_id, path, group_id)
|
group_folder_perm = seafile_api.get_folder_group_perm(repo_id, path, group_id)
|
||||||
|
|
||||||
if op_type == 'add':
|
|
||||||
if not group_folder_perm:
|
|
||||||
try:
|
|
||||||
seafile_api.add_folder_group_perm(repo_id, path, perm, group_id)
|
|
||||||
send_perm_audit_msg('add-repo-perm', request.user.username,
|
|
||||||
group_id, repo_id, path, perm)
|
|
||||||
except SearpcError as e:
|
|
||||||
logger.error(e)
|
|
||||||
return HttpResponse(json.dumps({"error": _('Operation failed')}),
|
|
||||||
status=500, content_type=content_type)
|
|
||||||
else:
|
|
||||||
return HttpResponse(json.dumps({"error": _('Already add this folder permission')}),
|
|
||||||
status=400, content_type=content_type)
|
|
||||||
|
|
||||||
if op_type == 'modify':
|
if op_type == 'modify':
|
||||||
if group_folder_perm and group_folder_perm != perm:
|
if group_folder_perm and group_folder_perm != perm:
|
||||||
try:
|
try:
|
||||||
@@ -2430,8 +2452,50 @@ def set_group_folder_perm(request, repo_id):
|
|||||||
return HttpResponse(json.dumps({"error": _('Please add folder permission first')}),
|
return HttpResponse(json.dumps({"error": _('Please add folder permission first')}),
|
||||||
status=400, content_type=content_type)
|
status=400, content_type=content_type)
|
||||||
|
|
||||||
return HttpResponse(json.dumps({'success': True}),
|
return HttpResponse(json.dumps({'success': True}), content_type=content_type)
|
||||||
content_type=content_type)
|
|
||||||
|
def add_group_folder_perm(request, repo_id, group_ids, path, perm):
|
||||||
|
"""
|
||||||
|
Add folder permission for group(s)
|
||||||
|
"""
|
||||||
|
content_type = 'application/json; charset=utf-8'
|
||||||
|
|
||||||
|
group_id_list = group_ids.split(',') # 'user'
|
||||||
|
|
||||||
|
success, failed = [], []
|
||||||
|
username = request.user.username
|
||||||
|
|
||||||
|
for group_id in group_id_list:
|
||||||
|
group_id = int(group_id)
|
||||||
|
result = check_group_folder_perm_args(username, repo_id, path, group_id, perm)
|
||||||
|
if 'error' in result:
|
||||||
|
return HttpResponse(json.dumps(result), status=result['status'],
|
||||||
|
content_type=content_type)
|
||||||
|
|
||||||
|
group_folder_perm = seafile_api.get_folder_group_perm(repo_id, path, group_id)
|
||||||
|
|
||||||
|
if group_folder_perm:
|
||||||
|
#Already add this folder permission
|
||||||
|
continue
|
||||||
|
|
||||||
|
try:
|
||||||
|
seafile_api.add_folder_group_perm(repo_id, path, perm, group_id)
|
||||||
|
send_perm_audit_msg('add-repo-perm', request.user.username,
|
||||||
|
group_id, repo_id, path, perm)
|
||||||
|
success.append({
|
||||||
|
'group_id': group_id,
|
||||||
|
"group_name": get_group(group_id).group_name,
|
||||||
|
})
|
||||||
|
except SearpcError as e:
|
||||||
|
logger.error(e)
|
||||||
|
failed.append(group_id)
|
||||||
|
|
||||||
|
if len(success) > 0:
|
||||||
|
data = json.dumps({"success": success, "failed": failed})
|
||||||
|
return HttpResponse(data, content_type=content_type)
|
||||||
|
else:
|
||||||
|
data = json.dumps({"error": _("Internal server error")})
|
||||||
|
return HttpResponse(data, status=500, content_type=content_type)
|
||||||
|
|
||||||
@login_required_ajax
|
@login_required_ajax
|
||||||
def get_group_basic_info(request, group_id):
|
def get_group_basic_info(request, group_id):
|
||||||
|
@@ -94,7 +94,6 @@ define([
|
|||||||
|
|
||||||
// use select2 to 'user' input in 'add user perm'
|
// use select2 to 'user' input in 'add user perm'
|
||||||
$('[name="email"]', $add_user_perm).select2({
|
$('[name="email"]', $add_user_perm).select2({
|
||||||
maximumSelectionSize: 1,
|
|
||||||
tags: function () {
|
tags: function () {
|
||||||
var contacts = app.pageOptions.contacts || [];
|
var contacts = app.pageOptions.contacts || [];
|
||||||
var contact_list = [];
|
var contact_list = [];
|
||||||
@@ -129,7 +128,6 @@ define([
|
|||||||
g_opts += '<option value="' + groups[i].id + '" data-index="' + i + '">' + groups[i].name + '</option>';
|
g_opts += '<option value="' + groups[i].id + '" data-index="' + i + '">' + groups[i].name + '</option>';
|
||||||
}
|
}
|
||||||
$('[name="group"]', $add_group_perm).html(g_opts).select2({
|
$('[name="group"]', $add_group_perm).html(g_opts).select2({
|
||||||
maximumSelectionSize: 1,
|
|
||||||
escapeMarkup: function(m) { return m; }
|
escapeMarkup: function(m) { return m; }
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@@ -162,19 +160,22 @@ define([
|
|||||||
'perm': perm
|
'perm': perm
|
||||||
},
|
},
|
||||||
'after_op_success': function(data) {
|
'after_op_success': function(data) {
|
||||||
var perm_item = new FolderPermItemView({
|
$(data.success).each(function(index, item) {
|
||||||
'repo_id': _this.repo_id,
|
var perm_item = new FolderPermItemView({
|
||||||
'path': _this.path,
|
'repo_id': _this.repo_id,
|
||||||
'item_data': {
|
'path': _this.path,
|
||||||
'user': email,
|
'item_data': {
|
||||||
'user_name': data.user_name,
|
'user': email,
|
||||||
'perm': perm,
|
'user_name': item.user_name,
|
||||||
'is_user_perm': true
|
'perm': perm,
|
||||||
}
|
'is_user_perm': true
|
||||||
|
}
|
||||||
|
});
|
||||||
|
form.after(perm_item.el);
|
||||||
});
|
});
|
||||||
form.after(perm_item.el);
|
|
||||||
|
|
||||||
$('[name="email"]', form).select2("val", "");
|
$('[name="email"]', form).select2("val", "");
|
||||||
|
$('#user-folder-perm .error').addClass('hide');
|
||||||
},
|
},
|
||||||
'after_op_error': function(xhr) {
|
'after_op_error': function(xhr) {
|
||||||
var err;
|
var err;
|
||||||
@@ -191,9 +192,8 @@ define([
|
|||||||
addGroupFolderPerm: function() {
|
addGroupFolderPerm: function() {
|
||||||
var _this = this;
|
var _this = this;
|
||||||
var form = this.$add_group_perm, // pseudo form
|
var form = this.$add_group_perm, // pseudo form
|
||||||
group_input = $('[name="group"]', form),
|
group_ids = $('[name="group"]', form).val().join(',');
|
||||||
group_id = group_input.val()[0];
|
if (!group_ids) {
|
||||||
if (!group_id) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -208,21 +208,24 @@ define([
|
|||||||
'post_data': {
|
'post_data': {
|
||||||
'path': this.path,
|
'path': this.path,
|
||||||
'type': 'add',
|
'type': 'add',
|
||||||
'group_id': group_id,
|
'group_id': group_ids,
|
||||||
'perm': perm
|
'perm': perm
|
||||||
},
|
},
|
||||||
'after_op_success': function(data) {
|
'after_op_success': function(data) {
|
||||||
var perm_item = new FolderPermItemView({
|
$(data.success).each(function(index, item) {
|
||||||
'repo_id': _this.repo_id,
|
var perm_item = new FolderPermItemView({
|
||||||
'path': _this.path,
|
'repo_id': _this.repo_id,
|
||||||
'item_data': {
|
'path': _this.path,
|
||||||
'is_user_perm': false,
|
'item_data': {
|
||||||
'perm': perm,
|
'is_user_perm': false,
|
||||||
'group_id': group_id,
|
'perm': perm,
|
||||||
'group_name': $('[name="group"]', form).select2('data')[0].text
|
'group_id': item.group_id,
|
||||||
}
|
'group_name': item.group_name
|
||||||
|
}
|
||||||
|
});
|
||||||
|
form.after(perm_item.el);
|
||||||
|
$('#group-folder-perm .error').addClass('hide');
|
||||||
});
|
});
|
||||||
form.after(perm_item.el);
|
|
||||||
|
|
||||||
$('[name="group"]', form).select2("val", "");
|
$('[name="group"]', form).select2("val", "");
|
||||||
},
|
},
|
||||||
|
Reference in New Issue
Block a user