mirror of
https://github.com/OpenNebula/one.git
synced 2025-03-21 14:50:08 +03:00
Sunstone fixes to support unpriviledge users
Removed chown/chgrp buttons for non-admins. Enabled full control for users in gid=0 Updated server get_pool with new OCA: admins get all resources, non admins get their group's resources. Fixed small related bugs. Commented multiple groups operations (add/del user to/from group etc) as they're not supported.
This commit is contained in:
parent
82982a7a31
commit
406f242fd8
@ -56,22 +56,26 @@ class SunstoneServer
|
||||
############################################################################
|
||||
#
|
||||
############################################################################
|
||||
def get_pool(kind)
|
||||
user_flag = -2
|
||||
def get_pool(kind,gid)
|
||||
pool = case kind
|
||||
when "group" then GroupPoolJSON.new(@client)
|
||||
when "host" then HostPoolJSON.new(@client)
|
||||
when "image" then ImagePoolJSON.new(@client, user_flag)
|
||||
when "template" then TemplatePoolJSON.new(@client, user_flag)
|
||||
when "vm" then VirtualMachinePoolJSON.new(@client, user_flag)
|
||||
when "vnet" then VirtualNetworkPoolJSON.new(@client, user_flag)
|
||||
when "image" then ImagePoolJSON.new(@client)
|
||||
when "template" then TemplatePoolJSON.new(@client)
|
||||
when "vm" then VirtualMachinePoolJSON.new(@client)
|
||||
when "vnet" then VirtualNetworkPoolJSON.new(@client)
|
||||
when "user" then UserPoolJSON.new(@client)
|
||||
else
|
||||
error = Error.new("Error: #{kind} resource not supported")
|
||||
return [404, error.to_json]
|
||||
end
|
||||
|
||||
rc = pool.info
|
||||
rc = case kind
|
||||
when "group","host","user" then pool.info
|
||||
else
|
||||
gid != "0" ? pool.info_group : pool.info_all
|
||||
end
|
||||
|
||||
if OpenNebula.is_error?(rc)
|
||||
return [500, rc.to_json]
|
||||
else
|
||||
|
@ -1645,12 +1645,12 @@ var OpenNebula = {
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
"chown": function(params)
|
||||
{
|
||||
OpenNebula.Helper.chown(params,OpenNebula.Group.resource,"group");
|
||||
}
|
||||
|
||||
// "chown": function(params)
|
||||
// {
|
||||
// OpenNebula.Helper.chown(params,OpenNebula.Group.resource,"group");
|
||||
// }
|
||||
},
|
||||
|
||||
"User": {
|
||||
@ -1824,67 +1824,6 @@ var OpenNebula = {
|
||||
var action = OpenNebula.Helper.action(method, {"group_id": gid});
|
||||
var request = OpenNebula.Helper.request(OpenNebula.User.resource,method, [id, gid]);
|
||||
|
||||
$.ajax({
|
||||
url: "user/" + id + "/action",
|
||||
type: "POST",
|
||||
data: JSON.stringify(action),
|
||||
success: function()
|
||||
{
|
||||
if (callback)
|
||||
{
|
||||
callback(request);
|
||||
}
|
||||
},
|
||||
error: function(response)
|
||||
{
|
||||
if (callback_error)
|
||||
{
|
||||
callback_error(request, OpenNebula.Error(response));
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
"addgroup" : function(params){
|
||||
var callback = params.success;
|
||||
var callback_error = params.error;
|
||||
var id = params.data.id;
|
||||
var gid = params.data.extra_param;
|
||||
|
||||
var method = "addgroup";
|
||||
var action = OpenNebula.Helper.action(method, {"group_id": gid});
|
||||
var request = OpenNebula.Helper.request(OpenNebula.User.resource,method, [id, gid]);
|
||||
|
||||
$.ajax({
|
||||
url: "user/" + id + "/action",
|
||||
type: "POST",
|
||||
data: JSON.stringify(action),
|
||||
success: function()
|
||||
{
|
||||
if (callback)
|
||||
{
|
||||
callback(request);
|
||||
}
|
||||
},
|
||||
error: function(response)
|
||||
{
|
||||
if (callback_error)
|
||||
{
|
||||
callback_error(request, OpenNebula.Error(response));
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
"delgroup" : function(params){
|
||||
var callback = params.success;
|
||||
var callback_error = params.error;
|
||||
var id = params.data.id;
|
||||
var gid = params.data.extra_param;
|
||||
|
||||
var method = "delgroup";
|
||||
var action = OpenNebula.Helper.action(method, {"group_id": gid});
|
||||
var request = OpenNebula.Helper.request(OpenNebula.User.resource,method, [id, gid]);
|
||||
|
||||
$.ajax({
|
||||
url: "user/" + id + "/action",
|
||||
type: "POST",
|
||||
@ -1905,6 +1844,67 @@ var OpenNebula = {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// "addgroup" : function(params){
|
||||
// var callback = params.success;
|
||||
// var callback_error = params.error;
|
||||
// var id = params.data.id;
|
||||
// var gid = params.data.extra_param;
|
||||
|
||||
// var method = "addgroup";
|
||||
// var action = OpenNebula.Helper.action(method, {"group_id": gid});
|
||||
// var request = OpenNebula.Helper.request(OpenNebula.User.resource,method, [id, gid]);
|
||||
|
||||
// $.ajax({
|
||||
// url: "user/" + id + "/action",
|
||||
// type: "POST",
|
||||
// data: JSON.stringify(action),
|
||||
// success: function()
|
||||
// {
|
||||
// if (callback)
|
||||
// {
|
||||
// callback(request);
|
||||
// }
|
||||
// },
|
||||
// error: function(response)
|
||||
// {
|
||||
// if (callback_error)
|
||||
// {
|
||||
// callback_error(request, OpenNebula.Error(response));
|
||||
// }
|
||||
// }
|
||||
// });
|
||||
// },
|
||||
// "delgroup" : function(params){
|
||||
// var callback = params.success;
|
||||
// var callback_error = params.error;
|
||||
// var id = params.data.id;
|
||||
// var gid = params.data.extra_param;
|
||||
|
||||
// var method = "delgroup";
|
||||
// var action = OpenNebula.Helper.action(method, {"group_id": gid});
|
||||
// var request = OpenNebula.Helper.request(OpenNebula.User.resource,method, [id, gid]);
|
||||
|
||||
// $.ajax({
|
||||
// url: "user/" + id + "/action",
|
||||
// type: "POST",
|
||||
// data: JSON.stringify(action),
|
||||
// success: function()
|
||||
// {
|
||||
// if (callback)
|
||||
// {
|
||||
// callback(request);
|
||||
// }
|
||||
// },
|
||||
// error: function(response)
|
||||
// {
|
||||
// if (callback_error)
|
||||
// {
|
||||
// callback_error(request, OpenNebula.Error(response));
|
||||
// }
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
},
|
||||
|
||||
"Image": {
|
||||
|
@ -99,7 +99,7 @@ var dashboard_tab_content =
|
||||
<h3>Quickstart</h3>\
|
||||
<form id="quickstart_form"><fieldset>\
|
||||
<table style="width:100%;"><tr style="vertical-align:middle;"><td style="width:70%">\
|
||||
<label style="font-weight:bold;width:40px;height:7em;">New:</label>\
|
||||
<label style="font-weight:bold;width:40px;height:8em;">New:</label>\
|
||||
<input type="radio" name="quickstart" value="Host.create_dialog">Host</input><br />\
|
||||
<input type="radio" name="quickstart" value="Group.create_dialog">Group</input><br />\
|
||||
<input type="radio" name="quickstart" value="Template.create_dialog">VM Template</input><br />\
|
||||
|
@ -81,7 +81,7 @@ var dashboard_tab_content =
|
||||
<h3>Quickstart</h3>\
|
||||
<form id="quickstart_form"><fieldset>\
|
||||
<table style="width:100%;"><tr style="vertical-align:middle;"><td style="width:70%">\
|
||||
<label style="font-weight:bold;width:40px;height:7em;">New:</label>\
|
||||
<label style="font-weight:bold;width:40px;height:4em;">New:</label>\
|
||||
<input type="radio" name="quickstart" value="Template.create_dialog">VM Template</input><br />\
|
||||
<input type="radio" name="quickstart" value="VM.create_dialog">VM Instance</input><br />\
|
||||
<input type="radio" name="quickstart" value="Network.create_dialog">Virtual Network</input><br />\
|
||||
|
@ -107,14 +107,14 @@ var group_actions = {
|
||||
notify:true
|
||||
},
|
||||
|
||||
"Group.chown" : {
|
||||
type: "multiple",
|
||||
call : OpenNebula.Group.chown,
|
||||
callback : updateGroupElement,
|
||||
elements: function() { return getSelectedNodes(dataTable_groups); },
|
||||
error : onError,
|
||||
notify:true
|
||||
},
|
||||
// "Group.chown" : {
|
||||
// type: "multiple",
|
||||
// call : OpenNebula.Group.chown,
|
||||
// callback : updateGroupElement,
|
||||
// elements: function() { return getSelectedNodes(dataTable_groups); },
|
||||
// error : onError,
|
||||
// notify:true
|
||||
// },
|
||||
|
||||
}
|
||||
|
||||
@ -130,13 +130,13 @@ var group_buttons = {
|
||||
text: "+ New Group",
|
||||
condition : True
|
||||
},
|
||||
"Group.chown" : {
|
||||
type: "confirm_with_select",
|
||||
text: "Change group owner",
|
||||
select: function(){return users_select},
|
||||
tip: "Select the new group owner:",
|
||||
condition : True
|
||||
},
|
||||
// "Group.chown" : {
|
||||
// type: "confirm_with_select",
|
||||
// text: "Change group owner",
|
||||
// select: function(){return users_select},
|
||||
// tip: "Select the new group owner:",
|
||||
// condition : True
|
||||
// },
|
||||
|
||||
"Group.delete" : {
|
||||
type: "action",
|
||||
|
@ -359,14 +359,14 @@ var image_buttons = {
|
||||
text: "Change owner",
|
||||
select: function() {return users_select;},
|
||||
tip: "Select the new owner:",
|
||||
condition: True
|
||||
condition: function() { return gid == 0; }
|
||||
},
|
||||
"Image.chgrp" : {
|
||||
type: "confirm_with_select",
|
||||
text: "Change group",
|
||||
select: function() {return groups_select;},
|
||||
tip: "Select the new group:",
|
||||
condition: True
|
||||
condition: function() { return gid == 0; }
|
||||
},
|
||||
"action_list" : {
|
||||
type: "select",
|
||||
|
@ -711,14 +711,14 @@ var template_buttons = {
|
||||
text: "Change owner",
|
||||
select: function() {return users_select;},
|
||||
tip: "Select the new owner:",
|
||||
condition: True
|
||||
condition: function(){return gid==0;}
|
||||
},
|
||||
"Template.chgrp" : {
|
||||
type: "confirm_with_select",
|
||||
text: "Change group",
|
||||
select: function() {return groups_select;},
|
||||
tip: "Select the new group:",
|
||||
condition: True
|
||||
condition: function(){return gid==0;}
|
||||
},
|
||||
"action_list" : {
|
||||
type: "select",
|
||||
|
@ -29,7 +29,7 @@ var users_tab_content =
|
||||
<th class="check"><input type="checkbox" class="check_all" value="">All</input></th>\
|
||||
<th>ID</th>\
|
||||
<th>Name</th>\
|
||||
<th>Groups</th>\
|
||||
<th>Group</th>\
|
||||
</tr>\
|
||||
</thead>\
|
||||
<tbody id="tbodyusers">\
|
||||
@ -93,7 +93,7 @@ var user_actions = {
|
||||
error: onError
|
||||
});
|
||||
},
|
||||
condition: function(){ uid == 0 },
|
||||
condition: True,
|
||||
notify: false
|
||||
},
|
||||
|
||||
@ -108,27 +108,27 @@ var user_actions = {
|
||||
notify: true
|
||||
},
|
||||
|
||||
"User.addgroup" : {
|
||||
type: "multiple",
|
||||
call: OpenNebula.User.addgroup,
|
||||
callback : function(req){
|
||||
Sunstone.runAction("User.show",req.request.data[0]);
|
||||
},
|
||||
elements : function() {return getSelectedNodes(dataTable_users);},
|
||||
error: onError,
|
||||
notify: true
|
||||
},
|
||||
// "User.addgroup" : {
|
||||
// type: "multiple",
|
||||
// call: OpenNebula.User.addgroup,
|
||||
// callback : function(req){
|
||||
// Sunstone.runAction("User.show",req.request.data[0]);
|
||||
// },
|
||||
// elements : function() {return getSelectedNodes(dataTable_users);},
|
||||
// error: onError,
|
||||
// notify: true
|
||||
// },
|
||||
|
||||
"User.delgroup" : {
|
||||
type: "multiple",
|
||||
call: OpenNebula.User.delgroup,
|
||||
callback : function(req){
|
||||
Sunstone.runAction("User.show",req.request.data[0]);
|
||||
},
|
||||
elements : function() {return getSelectedNodes(dataTable_users);},
|
||||
error: onError,
|
||||
notify: true
|
||||
},
|
||||
// "User.delgroup" : {
|
||||
// type: "multiple",
|
||||
// call: OpenNebula.User.delgroup,
|
||||
// callback : function(req){
|
||||
// Sunstone.runAction("User.show",req.request.data[0]);
|
||||
// },
|
||||
// elements : function() {return getSelectedNodes(dataTable_users);},
|
||||
// error: onError,
|
||||
// notify: true
|
||||
// },
|
||||
|
||||
"User.show" : {
|
||||
type: "single",
|
||||
@ -161,25 +161,25 @@ var user_buttons = {
|
||||
},
|
||||
"User.chgrp" : {
|
||||
type: "confirm_with_select",
|
||||
text: "Change main group",
|
||||
text: "Change group",
|
||||
select: function(){ return groups_select; },
|
||||
tip: "This will change the main group of the selected users. Select the new group:",
|
||||
condition: True
|
||||
},
|
||||
"User.addgroup" : {
|
||||
type: "confirm_with_select",
|
||||
text: "Add to group",
|
||||
select: function(){ return groups_select; },
|
||||
tip: "Select the new group to add users:",
|
||||
condition: True
|
||||
},
|
||||
"User.delgroup" : {
|
||||
type: "confirm_with_select",
|
||||
text: "Delete from group",
|
||||
select: function(){ return groups_select; },
|
||||
tip: "Select the group from which to delete users:",
|
||||
condition: True
|
||||
},
|
||||
// "User.addgroup" : {
|
||||
// type: "confirm_with_select",
|
||||
// text: "Add to group",
|
||||
// select: function(){ return groups_select; },
|
||||
// tip: "Select the new group to add users:",
|
||||
// condition: True
|
||||
// },
|
||||
// "User.delgroup" : {
|
||||
// type: "confirm_with_select",
|
||||
// text: "Delete from group",
|
||||
// select: function(){ return groups_select; },
|
||||
// tip: "Select the group from which to delete users:",
|
||||
// condition: True
|
||||
// },
|
||||
"User.delete" : {
|
||||
type: "action",
|
||||
text: "Delete",
|
||||
@ -191,7 +191,7 @@ var users_tab = {
|
||||
title: "Users",
|
||||
content: users_tab_content,
|
||||
buttons: user_buttons,
|
||||
condition: function(){ return uid == 0; }
|
||||
condition: True
|
||||
}
|
||||
|
||||
Sunstone.addActions(user_actions);
|
||||
@ -201,52 +201,12 @@ Sunstone.addMainTab('users_tab',users_tab);
|
||||
// added to the dataTable
|
||||
function userElementArray(user_json){
|
||||
var user = user_json.USER;
|
||||
if (!user.NAME || user.NAME == {}){
|
||||
name = "";
|
||||
} else {
|
||||
name = user.NAME;
|
||||
}
|
||||
|
||||
var groups_str="";
|
||||
if (user.GROUPS.ID.constructor == Array){ //several groups
|
||||
for (var i=0; i< user.GROUPS.ID.length; i++){
|
||||
groups_str+=getGroupName(user.GROUPS.ID[i])+', ';
|
||||
};
|
||||
groups_str = groups_str.slice(0,-2);
|
||||
} else { //one group
|
||||
groups_str = getGroupName(user.GROUPS.ID);
|
||||
};
|
||||
|
||||
// var groups_full_str=getGroupName(user.GID)+", ";
|
||||
// var group_field;
|
||||
|
||||
// if (user.GROUPS.ID){
|
||||
// $.each(user.GROUPS.ID,function() {
|
||||
// if (i<=5) {
|
||||
// groups_str+=getGroupName(this)+", ";
|
||||
// };
|
||||
// groups_full_str+=getGroupName(this)+", ";
|
||||
// i++;
|
||||
// });
|
||||
// if (i>0){
|
||||
// groups_str = groups_str.slice(0, -2);
|
||||
// groups_full_str = groups_str.slice(0, -2);
|
||||
// };
|
||||
// if (i>5){
|
||||
// groups_str+="...";
|
||||
// group_field = '<div class="shortened_info">'+groups_str+'</div><div class="full_info" style="display:none">'+groups_full_str+'</div>';
|
||||
// } else {
|
||||
// group_field=groups_str;
|
||||
// };
|
||||
// }
|
||||
|
||||
|
||||
|
||||
return [
|
||||
'<input type="checkbox" id="user_'+user.ID+'" name="selected_items" value="'+user.ID+'"/>',
|
||||
user.ID,
|
||||
name,
|
||||
groups_str
|
||||
user.NAME,
|
||||
user.GNAME
|
||||
]
|
||||
}
|
||||
|
||||
@ -305,7 +265,7 @@ function setupCreateUserDialog(){
|
||||
$('#create_user_form').submit(function(){
|
||||
var user_name=$('#username',this).val();
|
||||
var user_password=$('#pass',this).val();
|
||||
if (!user_name.length && !user_password.length){
|
||||
if (!user_name.length || !user_password.length){
|
||||
notifyError("User name and password must be filled in");
|
||||
return false;
|
||||
}
|
||||
@ -337,30 +297,29 @@ function setUserAutorefresh(){
|
||||
|
||||
$(document).ready(function(){
|
||||
//if we are not oneadmin, our tab will not even be in the DOM.
|
||||
if (uid==0) {
|
||||
dataTable_users = $("#datatable_users").dataTable({
|
||||
"bJQueryUI": true,
|
||||
"bSortClasses": false,
|
||||
"sPaginationType": "full_numbers",
|
||||
"bAutoWidth":false,
|
||||
"aoColumnDefs": [
|
||||
{ "bSortable": false, "aTargets": ["check"] },
|
||||
{ "sWidth": "60px", "aTargets": [0] },
|
||||
{ "sWidth": "35px", "aTargets": [1] }
|
||||
]
|
||||
});
|
||||
dataTable_users.fnClearTable();
|
||||
addElement([
|
||||
spinner,
|
||||
'','',''],dataTable_users);
|
||||
dataTable_users = $("#datatable_users").dataTable({
|
||||
"bJQueryUI": true,
|
||||
"bSortClasses": false,
|
||||
"sPaginationType": "full_numbers",
|
||||
"bAutoWidth":false,
|
||||
"aoColumnDefs": [
|
||||
{ "bSortable": false, "aTargets": ["check"] },
|
||||
{ "sWidth": "60px", "aTargets": [0] },
|
||||
{ "sWidth": "35px", "aTargets": [1] }
|
||||
]
|
||||
});
|
||||
dataTable_users.fnClearTable();
|
||||
addElement([
|
||||
spinner,
|
||||
'','',''],dataTable_users);
|
||||
|
||||
Sunstone.runAction("User.list");
|
||||
Sunstone.runAction("User.list");
|
||||
|
||||
setupCreateUserDialog();
|
||||
setUserAutorefresh();
|
||||
setupCreateUserDialog();
|
||||
setUserAutorefresh();
|
||||
|
||||
initCheckAllBoxes(dataTable_users);
|
||||
tableCheckboxesListener(dataTable_users);
|
||||
shortenedInfoFields('#datatable_users');
|
||||
|
||||
initCheckAllBoxes(dataTable_users);
|
||||
tableCheckboxesListener(dataTable_users);
|
||||
shortenedInfoFields('#datatable_users');
|
||||
}
|
||||
})
|
||||
|
@ -419,7 +419,7 @@ var vm_buttons = {
|
||||
text: "Change owner",
|
||||
select: function() {return users_select;},
|
||||
tip: "Select the new owner:",
|
||||
condition: True
|
||||
condition: function() { return gid == 0; }
|
||||
},
|
||||
|
||||
"VM.chgrp" : {
|
||||
@ -427,7 +427,7 @@ var vm_buttons = {
|
||||
text: "Change group",
|
||||
select: function() {return groups_select;},
|
||||
tip: "Select the new group:",
|
||||
condition: True
|
||||
condition: function() { return gid == 0; }
|
||||
},
|
||||
|
||||
"VM.shutdown" : {
|
||||
|
@ -264,7 +264,7 @@ var vnet_buttons = {
|
||||
text: "Change owner",
|
||||
select: function() {return users_select;},
|
||||
tip: "Select the new owner:",
|
||||
condition: True
|
||||
condition: function() { return gid == 0; }
|
||||
},
|
||||
|
||||
"Network.chgrp" : {
|
||||
@ -272,7 +272,7 @@ var vnet_buttons = {
|
||||
text: "Change group",
|
||||
select: function() {return groups_select;},
|
||||
tip: "Select the new group:",
|
||||
condition: True
|
||||
condition: function() { return gid == 0; }
|
||||
},
|
||||
|
||||
"Network.delete" : {
|
||||
|
@ -374,9 +374,10 @@ function readCookie(){
|
||||
//sets the user info in the top bar and creates a listner in the
|
||||
//signout button
|
||||
function setLogin(){
|
||||
//This two variables can be used anywhere
|
||||
//This variables can be used anywhere
|
||||
username = cookie["one-user"];
|
||||
uid = cookie["one-user_id"];
|
||||
gid = cookie["one-user_gid"];
|
||||
|
||||
$("#user").html(username);
|
||||
$("#logout").click(function(){
|
||||
|
@ -137,6 +137,9 @@ get '/' do
|
||||
response.set_cookie("one-user_id",
|
||||
:value=>"#{session[:user_id]}",
|
||||
:expires=>time)
|
||||
response.set_cookie("one-user_gid",
|
||||
:value=>"#{session[:user_gid]}",
|
||||
:expires=>time)
|
||||
|
||||
p = SunstonePlugins.new
|
||||
@plugins = p.authorized_plugins(session[:user], session[:user_gname])
|
||||
@ -187,7 +190,7 @@ end
|
||||
# GET Pool information
|
||||
##############################################################################
|
||||
get '/:pool' do
|
||||
@SunstoneServer.get_pool(params[:pool])
|
||||
@SunstoneServer.get_pool(params[:pool],session[:user_gid])
|
||||
end
|
||||
|
||||
##############################################################################
|
||||
|
Loading…
x
Reference in New Issue
Block a user