Skip to content

Commit

Permalink
[Fixes #4863] Trying to assign permission to more than one users, fails
Browse files Browse the repository at this point in the history
  • Loading branch information
afabiani committed Sep 10, 2019
1 parent fc8c26f commit 6e26346
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 66 deletions.
2 changes: 1 addition & 1 deletion geonode/static/geonode/js/upload/LayerInfo.js
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ define(function (require, exports) {
if (!form_data) {
form_data = new FormData();
}
// this should be generate from the permission widget
// this should be generated from the permission widget
if (typeof permissionsString == 'undefined'){
perm = {}
}
Expand Down
24 changes: 12 additions & 12 deletions geonode/templates/_permissions.html
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,13 @@ <h4 class="panel-title">
<div class="radio">
<label>
{% trans "The following users:" %}
<select class="user-select" name="view_resourcebase" id="view_resourcebase_users" required></select>
<select class="user-select" name="view_resourcebase_users" id="view_resourcebase_users" required></select>
</label>
</div>
<div class="radio">
<label>
{% trans "The following groups:" %}
<select class="group-select" name="view_resourcebase" id="view_resourcebase_groups"></select>
<select class="group-select" name="view_resourcebase_groups" id="view_resourcebase_groups"></select>
</label>
</div>
</div>
Expand All @@ -61,13 +61,13 @@ <h4 class="panel-title">
<div class="radio">
<label>
{% trans "The following users:" %}
<select class="user-select" name="download_resourcebase" id="download_resourcebase_users" required></select>
<select class="user-select" name="download_resourcebase_users" id="download_resourcebase_users" required></select>
</label>
</div>
<div class="radio">
<label>
{% trans "The following groups:" %}
<select class="group-select" name="download_resourcebase" id="download_resourcebase_groups"></select>
<select class="group-select" name="download_resourcebase_groups" id="download_resourcebase_groups"></select>
</label>
</div>
</div>
Expand All @@ -87,13 +87,13 @@ <h4 class="panel-title">
<div class="radio">
<label>
{% trans "The following users:" %}
<select class="user-select" name="change_resourcebase_metadata" id="change_resourcebase_metadata_users" required></select>
<select class="user-select" name="change_resourcebase_metadata_users" id="change_resourcebase_metadata_users" required></select>
</label>
</div>
<div class="radio">
<label>
{% trans "The following groups:" %}
<select class="group-select" name="change_resourcebase_metadata" id="change_resourcebase_metadata_groups"></select>
<select class="group-select" name="change_resourcebase_metadata_groups" id="change_resourcebase_metadata_groups"></select>
</label>
</div>
</div>
Expand All @@ -114,13 +114,13 @@ <h4 class="panel-title">
<div class="radio">
<label>
{% trans "The following users:" %}
<select class="user-select" name="change_layer_data" id="change_layer_data_users" required></select>
<select class="user-select" name="change_layer_data_users" id="change_layer_data_users" required></select>
</label>
</div>
<div class="radio">
<label>
{% trans "The following groups:" %}
<select class="group-select" name="change_layer_data" id="change_layer_data_groups"></select>
<select class="group-select" name="change_layer_data_groups" id="change_layer_data_groups"></select>
</label>
</div>
</div>
Expand All @@ -140,13 +140,13 @@ <h4 class="panel-title">
<div class="radio">
<label>
{% trans "The following users:" %}
<select class="user-select" name="change_layer_style" id="change_layer_style_users" required></select>
<select class="user-select" name="change_layer_style_users" id="change_layer_style_users" required></select>
</label>
</div>
<div class="radio">
<label>
{% trans "The following groups:" %}
<select class="group-select" name="change_layer_style" id="change_layer_style_groups"></select>
<select class="group-select" name="change_layer_style_groups" id="change_layer_style_groups"></select>
</label>
</div>
</div>
Expand All @@ -167,13 +167,13 @@ <h4 class="panel-title">
<div class="radio">
<label>
{% trans "The following users:" %}
<select class="user-select" name="manage_resourcebase" id="manage_resourcebase_users" required></select>
<select class="user-select" name="manage_resourcebase_users" id="manage_resourcebase_users" required></select>
</label>
</div>
<div class="radio">
<label>
{% trans "The following groups:" %}
<select class="group-select" name="manage_resourcebase" id="manage_resourcebase_groups"></select>
<select class="group-select" name="manage_resourcebase_groups" id="manage_resourcebase_groups"></select>
</label>
</div>
</div>
Expand Down
113 changes: 60 additions & 53 deletions geonode/templates/_permissions_form_js.html
Original file line number Diff line number Diff line change
Expand Up @@ -35,50 +35,52 @@
*/
for(var perm in data){
if(data[perm] !== ''){
var perms_to_assign = [perm];
if(perm=='manage_resourcebase'){
perms_to_assign = ['change_resourcebase', 'delete_resourcebase', 'change_resourcebase_permissions', 'publish_resourcebase'];
var perms_to_assign = [];
var perm_users_found = false;
var perm_groups_found = false;
if(perm.endsWith("_users")) {
perms_to_assign = [perm.substring(0, perm.length - "_users".length)];
perm_users_found = true;
}
var d_perms = '';
if (data[perm] instanceof Array) {
d_perms = data[perm][0];
} else {
d_perms = data[perm];
if(perm.endsWith("_groups")) {
perms_to_assign = [perm.substring(0, perm.length - "_groups".length)];
perm_groups_found = true;
}
for (var i=0;i<d_perms.split(',').length;i++){
var user = d_perms.split(',')[i];
for(var j=0;j< perms_to_assign.length;j++){
if(permissions['users'].hasOwnProperty(user)){
permissions['users'][user].push(perms_to_assign[j]);
}else{
permissions['users'][user] = [perms_to_assign[j]];
}
}
}
}
if(data[perm] instanceof Array && data[perm].length == 2){
var perms_to_assign = [perm];
if(perm=='manage_resourcebase'){
perms_to_assign = ['change_resourcebase', 'delete_resourcebase', 'change_resourcebase_permissions', 'publish_resourcebase'];
if(perm.startsWith('manage_resourcebase')){
perms_to_assign = ['change_resourcebase', 'delete_resourcebase', 'change_resourcebase_permissions', 'publish_resourcebase'];
}
var d_perms = '';
if (data[perm] instanceof Array) {
d_perms = data[perm][1];
} else {
d_perms = data[perm];
}
for (var i=0;i<d_perms.split(',').length;i++){
var group = d_perms.split(',')[i];
for(var j=0;j< perms_to_assign.length;j++){
if(permissions['groups'].hasOwnProperty(group)){
permissions['groups'][group].push(perms_to_assign[j]);
}else{
permissions['groups'][group] = [perms_to_assign[j]];

if (perm_users_found || perm_groups_found) {
var perm_key = perm_users_found ? 'users' : 'groups';
var d_perms = data[perm];

if (d_perms instanceof Array) {
for (var i=0;i<d_perms.length;i++){
var perm_value = d_perms[i];
for(var j=0;j< perms_to_assign.length;j++){
if(permissions[perm_key].hasOwnProperty(perm_value)){
permissions[perm_key][perm_value].push(perms_to_assign[j]);
}else{
permissions[perm_key][perm_value] = [perms_to_assign[j]];
}
}
}
} else {
for (var i=0;i<d_perms.split(',').length;i++){
var perm_value = d_perms.split(',')[i];
for(var j=0;j< perms_to_assign.length;j++){
if(permissions[perm_key].hasOwnProperty(perm_value)){
permissions[perm_key][perm_value].push(perms_to_assign[j]);
}else{
permissions[perm_key][perm_value] = [perms_to_assign[j]];
}
}
}
}
}
}
}

return permissions
};

Expand Down Expand Up @@ -163,12 +165,8 @@
users[user_perms[i]].push(user);
}
}
// $('#' + perm + '_users').val(users[perm].join());
$(users[perm]).each(function( index ) {
$('#' + perm + '_users').append(new Option(this, this));
});
addSelectUsers('#' + perm + '_users', users[perm]);
}
addSelectUsers();

/*
* Compile the groups fields after receiving the current permissions status from the server
Expand All @@ -181,6 +179,7 @@
change_layer_style: [],
manage_resourcebase: []
};

var perms_groups = perms.groups;
for (var group in perms_groups){
if (group !== 'anonymous'){
Expand All @@ -198,24 +197,18 @@
}
}
}

for (var perm in groups){
// $('#' + perm + '_groups').val(groups[perm].join());
$(groups[perm]).each(function( index ) {
$('#' + perm + '_groups').append(new Option(this, this));
});
addSelectGroups('#' + perm + '_groups', groups[perm]);
}
addSelectGroups();
}
}
);
{% else %}
addSelectUsers();
addSelectGroups();
{% endif %}
});

function addSelectUsers(){
$(".user-select").select2({
function addSelectUsers(id, default_perms){
$(id).select2({
placeholder: '{% trans "Choose users..." %}',
minimumInputLength: 1,
multiple: true,
Expand Down Expand Up @@ -254,12 +247,19 @@
};
},
cache: true
},
initSelection: function (element, callback) {
var data = [];
$(default_perms).each(function (index, perm) {
data.push({id: perm, text: perm});
});
callback(data);
}
});
}

function addSelectGroups(){
$(".group-select").select2({
function addSelectGroups(id, default_perms){
$(id).select2({
placeholder: '{% trans "Choose groups..." %}',
minimumInputLength: 1,
multiple: true,
Expand Down Expand Up @@ -295,6 +295,13 @@
};
},
cache: true
},
initSelection: function (element, callback) {
var data = [];
$(default_perms).each(function (index, perm) {
data.push({id: perm, text: perm});
});
callback(data);
}
});
}
Expand Down

0 comments on commit 6e26346

Please sign in to comment.