MongoDB Tutorial 3: Delete User

From The Uniform Server Wiki
Revision as of 13:21, 1 August 2010 by Ric (talk | contribs) (New page: {{Nav MongoDB Tutorial 3}} '''''Delete a user''''' == Introduction == For security reasons you generally assign a single user to a database. However there may be applications that require ...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

 

MongoDB Production Standalone
UniServer 6-Carbo.

Delete a user

Introduction

For security reasons you generally assign a single user to a database. However there may be applications that require several users. You can add more users using the create database window. This window displays only the first user assigned to a database.

This page covers displaying all users assigned to a database allowing you to select and delete an individual user.

Select a database and user

Select a database

  • Previous page we finished with a script
  • Select and delete a database.
  • Resulting Window is show on right.

Add select a user'

  • There is no point in reinventing the wheel
  • Window on the right shows symmetry
  • Code is a copy and past exercise
  • With few name changes

Top

Complete script

<?php

//-- Constants ----------------------------------------------------------------

define('IDC_USER_DATABASE3',    4010); // Text box Database name
define('IDC_USER_3',            4020); // Text box Database name
define('IDC_DELETE_USER',       4030); // Button Delete user


define('IDC_DB_LISTBOX3',       4040); // Database list box
define('IDC_USER_LISTBOX3',     4050); // Users list box

// Common variables

$mongo_user_win3;        // Window handle
$user_new_db3;           // List of dbs
$user_new_3;             // List of users

//=== Create function =========================================================
function delete_user_window($parent){
  global $mongo_user_win3;
  global $user_new_db3;

// Check server running
if(!mongodb_running()){
 $str  = "";
 $str .= "This item requires access to a running server.\n";
 $str .= "Please start MonGoDB server and run\n";
 $str .= "this item again.";
 wb_message_box(NULL, $str,"Server not running", WBC_INFO); 
 return; // Give up
}

//=== 1) Create main window ---------------------------------------------------

$mongo_user_win3 = wb_create_window($parent, ModalDialog, "MongoDB Delete User", WBC_CENTER, WBC_CENTER, 474, 230,
  WBC_INVISIBLE | WBC_NOTIFY | WBC_TOP, WBC_HEADERSEL);

//=== 2) Create controls for the main window ----------------------------------

wb_create_control($mongo_user_win3, Frame, 'Database',         65,   5, 165, 55, 0, 0, 0, 0);
wb_create_control($mongo_user_win3, PushButton, 'Delete',       5,  25,  50, 25, IDC_DELETE_USER, 0, 0, 0);
wb_create_control($mongo_user_win3, EditBox, '',               75,  25, 145, 20, IDC_USER_DATABASE3, 0, 0, 0);

wb_create_control($mongo_user_win3, Frame, 'Select a database',   5,  65, 225, 125, 0, 0, 0, 0);
$list3 = wb_create_control($mongo_user_win3, ListView, 'Head1',  20,  85, 200, 95, IDC_DB_LISTBOX3, 0x00100080, 0, 0);


wb_create_control($mongo_user_win3, Frame, 'User',               235,   5, 225, 55, 0, 0, 0, 0);
wb_create_control($mongo_user_win3, EditBox, '',                 250,  25, 200, 20, IDC_USER_3, 0, 0, 0);

wb_create_control($mongo_user_win3, Frame, 'Select a user',      235,  65, 225, 125, 0, 0, 0, 0);
$list4 = wb_create_control($mongo_user_win3, ListView, 'Head1',  250,  85, 200, 95, IDC_USER_LISTBOX3, 0x00100080, 0, 0);

//=== INIT ====================
//--- Set up listview 1 ---

  // Set column titles and widths
  wb_set_text($list3, array(
    array("List of Databases", 180),
  ));

  $user_new_db3 = list_dbs_auth();        // Get list of dbs

  // Create rows and columns
  wb_create_items($list3,$user_new_db3);   // Fill list

//--- Set up listview 2 ---

  // Set column titles and widths
  wb_set_text($list4, array(
    array("List of Users", 180),
  ));

//--- End Set up listview ---

//=== END INIT ================   

//=== 3) Assign handler function to the main window  --------------------------
wb_set_handler($mongo_user_win3, "process_delete_user");
  wb_set_image($mongo_user_win3, getcwd()."/images/utray.ico");  // Add logo   
  wb_set_visible($mongo_user_win3, true);               // Show window         

//=== 5) Enter application loop -----------------------------------------------
//wb_main_loop();                                  

}//==================================================== End Create function ===

//=== 4) Handler Function -----------------------------------------------------
function process_delete_user($window, $id, $ctrl=0, $lparam1=0, $lparam2=0){
  global $user_new_db3;
  global $user_new_3;

  switch($id) { 

  //=== DELETE USER ===========================================================
  case  IDC_DELETE_USER: 

  $db    = wb_get_text(wb_get_control($window,  IDC_USER_DATABASE3)); // Get db
  $user  = wb_get_text(wb_get_control($window,  IDC_USER_3));         // Get user

 // Validate - User name cannot be root 
 if($user == 'root'){
  $str  = "";
  $str .= "The root User\n";
  $str .= "Can not be deleted ";
  wb_message_box($window, $str,"User Name", WBC_INFO); 
  break;
}

 // Validate - db name user may have typed in name 
 if (!(preg_match("/^[A-Za-z0-9_]+$/", $db))) {
  $str  = "";
  $str .= "If database name is empty please select a name\n";
  $str .= "Or type in a database name\n";
  $str .= "Only alphanumeric characters allowed";
  wb_message_box($window, $str,"DB Name", WBC_INFO); 
  break;
 }

 // Validate - User name user may have typed in name 
 if (!(preg_match("/^[A-Za-z0-9_]+$/", $user))) {
  $str  = "";
  $str .= "If User name is empty please select a name\n";
  $str .= "Or type in a name\n";
  $str .= "Only alphanumeric characters allowed";
  wb_message_box($window, $str,"User Name", WBC_INFO); 
  break;
 }

  // Delete user
  delete_user_auth($db,$user); // Delete user from selected database

  // Update user list
  $user_new_3 = get_user_auth($db);   //Select a db and obtain user/s asigned array 

  $temp = $user_new_3;                                                 // Save array        
  wb_delete_items (wb_get_control($window, IDC_USER_LISTBOX3),NULL);   // Delete all list view entries
  wb_create_items (wb_get_control($window, IDC_USER_LISTBOX3),$temp);  // Add array

  wb_set_text(wb_get_control($window, IDC_USER_3),""); // Reset Set User

   break;

  //===================================================== END DELETE USER ====

  //=== Item selected from list of dbs ========================================
  case IDC_DB_LISTBOX3:                      // A row was selected from db list

  $sel = wb_get_selected($ctrl);               // Get selection
  $sel = $sel ? implode(", ", $sel) : "none";  // Set selected value 

  if($sel =="none"){
    wb_set_text(wb_get_control($window, IDC_USER_DATABASE3),""); // Reset DB
    wb_set_text(wb_get_control($window, IDC_USER_3),"");         // Reset User
    wb_delete_items (wb_get_control($window, IDC_USER_LISTBOX3),NULL);   // Delete all list view entries
  }
  else{
    $selected_index = $sel;                 // Save Array index
    $contents = wb_get_text($ctrl);         // Get row selected Returns an array of arrays
    $first_array = $contents[0];            // Select first array (which is selected row)
    $db_selected_name = $first_array[0];    // Select first column (which is db)
    $db_selected_name = trim($db_selected_name); // Clean

    wb_set_text(wb_get_control($window, IDC_USER_DATABASE3),$db_selected_name); // Set DB


  $user_new_3 = get_user_auth($db_selected_name);   //Select a db and obtain user/s asigned array 

  $temp = $user_new_3;                                                 // Save array        
  wb_delete_items (wb_get_control($window, IDC_USER_LISTBOX3),NULL);   // Delete all list view entries
  wb_create_items (wb_get_control($window, IDC_USER_LISTBOX3),$temp);  // Add array

  }
  break;
  //======================================== Item selected from list of dbs ===

  //=== Item selected from list of users ======================================
  case IDC_USER_LISTBOX3:                   // A row was selected from db list

  $sel = wb_get_selected($ctrl);               // Get selection
  $sel = $sel ? implode(", ", $sel) : "none";  // Set selected value 

  if($sel =="none"){
    wb_set_text(wb_get_control($window, IDC_USER_3),"");         // Reset User
  }
  else{
    $selected_index = $sel;                   // Save Array index
    $contents = wb_get_text($ctrl);           // Get row selected Returns an array of arrays
    $first_array = $contents[0];              // Select first array (which is selected row)
    $user_selected_name = $first_array[0];    // Select first column (which is user)
    $user_selected_name = trim($user_selected_name); // Clean

    wb_set_text(wb_get_control($window, IDC_USER_3),$user_selected_name); // Set User
  }

  break;
  //================================== Item selected from dbs list of users ===

   case IDCLOSE:                          // Constant IDCLOSE (8) predefined 
    wb_destroy_window($window);           // Destroy the window
   break; 
  }
}
//==================================================== End Handler Function ===
?>

Top

Test

Edit file z_mongo\mongodb_1\control\mongo_db.php Add the following to the include section:

include_once "window_delete_user.inc.php";     // Window delete user 

Change the following section as shown:

   //=== Display help info ====================================================
   case ID_HELP_BUTTON:          // Button 

       delete_user_window($window);
//      drop_database_window($window);
//      create_database_window($window);
//    create_port_change_window($window);
//    wb_exec('Notepad',INFO_TXT);

   break; 
   //================================================ END Display help info ===

Run

  • Run Run_mongo_db.bat
  • Click "Help and Information" button
  • Result similar to than on right

Top

Summary

Above is last in a series of pop-up utilities required for our application.

To test these utilities we have been using button "Help and Information"

Next page looks at integrating these into the main application.

Top