client/show-privs: allow showing single char hints in table output
All checks were successful
All checks were successful
This commit is contained in:
@@ -27,6 +27,12 @@ pub struct ShowPrivsArgs {
|
||||
#[arg(short, long)]
|
||||
json: bool,
|
||||
|
||||
/// Show single-character privilege names in addition to human-readable names
|
||||
///
|
||||
/// This flag has no effect when used with --json
|
||||
#[arg(short, long)]
|
||||
long: bool,
|
||||
|
||||
/// Return a non-zero exit code if any of the results were erroneous
|
||||
#[arg(short, long)]
|
||||
fail: bool,
|
||||
@@ -67,7 +73,7 @@ pub async fn show_database_privileges(
|
||||
if args.json {
|
||||
print_list_privileges_output_status_json(&privilege_data);
|
||||
} else {
|
||||
print_list_privileges_output_status(&privilege_data);
|
||||
print_list_privileges_output_status(&privilege_data, args.long);
|
||||
}
|
||||
|
||||
if args.fail && privilege_data.values().any(|res| res.is_err()) {
|
||||
|
||||
@@ -101,3 +101,22 @@ pub fn db_priv_field_human_readable_name(name: &str) -> String {
|
||||
_ => format!("Unknown({})", name),
|
||||
}
|
||||
}
|
||||
|
||||
/// Converts a database privilege field name to a single-character name.
|
||||
/// (the characters from the cli privilege editor)
|
||||
pub fn db_priv_field_single_character_name(name: &str) -> &str {
|
||||
match name {
|
||||
"select_priv" => "s",
|
||||
"insert_priv" => "i",
|
||||
"update_priv" => "u",
|
||||
"delete_priv" => "d",
|
||||
"create_priv" => "c",
|
||||
"drop_priv" => "D",
|
||||
"alter_priv" => "a",
|
||||
"index_priv" => "I",
|
||||
"create_tmp_table_priv" => "t",
|
||||
"lock_tables_priv" => "l",
|
||||
"references_priv" => "r",
|
||||
_ => "?",
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ use crate::core::{
|
||||
common::yn,
|
||||
database_privileges::{
|
||||
DATABASE_PRIVILEGE_FIELDS, DatabasePrivilegeRow, db_priv_field_human_readable_name,
|
||||
db_priv_field_single_character_name,
|
||||
},
|
||||
protocol::request_validation::{NameValidationError, OwnerValidationError},
|
||||
types::{DbOrUser, MySQLDatabase},
|
||||
@@ -23,7 +24,7 @@ pub type ListPrivilegesRequest = Option<Vec<MySQLDatabase>>;
|
||||
pub type ListPrivilegesResponse =
|
||||
BTreeMap<MySQLDatabase, Result<Vec<DatabasePrivilegeRow>, GetDatabasesPrivilegeDataError>>;
|
||||
|
||||
pub fn print_list_privileges_output_status(output: &ListPrivilegesResponse) {
|
||||
pub fn print_list_privileges_output_status(output: &ListPrivilegesResponse, long_names: bool) {
|
||||
let mut final_privs_map: BTreeMap<MySQLDatabase, Vec<DatabasePrivilegeRow>> = BTreeMap::new();
|
||||
for (db_name, db_result) in output {
|
||||
match db_result {
|
||||
@@ -45,7 +46,19 @@ pub fn print_list_privileges_output_status(output: &ListPrivilegesResponse) {
|
||||
table.add_row(Row::new(
|
||||
DATABASE_PRIVILEGE_FIELDS
|
||||
.into_iter()
|
||||
.map(db_priv_field_human_readable_name)
|
||||
.map(|field| {
|
||||
if field == "Db" || field == "User" {
|
||||
db_priv_field_human_readable_name(field)
|
||||
} else if long_names {
|
||||
format!(
|
||||
"{} ({})",
|
||||
db_priv_field_human_readable_name(field),
|
||||
db_priv_field_single_character_name(field),
|
||||
)
|
||||
} else {
|
||||
db_priv_field_human_readable_name(field)
|
||||
}
|
||||
})
|
||||
.map(|name| Cell::new(&name))
|
||||
.collect(),
|
||||
));
|
||||
|
||||
Reference in New Issue
Block a user