]> git.proxmox.com Git - proxmox-backup.git/commitdiff
api2/acl: add privs array to roles
authorDominik Csapak <d.csapak@proxmox.com>
Wed, 20 May 2020 10:15:31 +0000 (12:15 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Wed, 20 May 2020 11:21:37 +0000 (13:21 +0200)
so that an admin can see which roles have which privileges

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
src/api2/access/role.rs

index 3d284dea0a8decc28490ce6af766f129782f5a7c..2e114b7598125dc09b6f895fa73bf644835e9ab0 100644 (file)
@@ -6,7 +6,7 @@ use proxmox::api::{api, Permission};
 use proxmox::api::router::Router;
 
 use crate::api2::types::*;
-use crate::config::acl::{Role, ROLE_NAMES};
+use crate::config::acl::{Role, ROLE_NAMES, PRIVILEGES};
 
 #[api(
     returns: {
@@ -19,6 +19,14 @@ use crate::config::acl::{Role, ROLE_NAMES};
                 role: {
                     type: Role,
                 },
+                privs: {
+                    type: Array,
+                    description: "List of Privileges",
+                    items: {
+                        type: String,
+                        description: "A Privilege",
+                    },
+                },
                 comment: {
                     schema: SINGLE_LINE_COMMENT_SCHEMA,
                     optional: true,
@@ -34,8 +42,14 @@ use crate::config::acl::{Role, ROLE_NAMES};
 fn list_roles() -> Result<Value, Error> {
     let mut list = Vec::new();
 
-    for (role, comment) in ROLE_NAMES.iter() {
-        list.push(json!({ "role": role, "comment": comment }));
+    for (role, (privs, comment)) in ROLE_NAMES.iter() {
+        let mut priv_list = Vec::new();
+        for (name, privilege) in PRIVILEGES.iter() {
+            if privs & privilege > 0 {
+                priv_list.push(name.clone());
+            }
+        }
+        list.push(json!({ "role": role, "privs": priv_list, "comment": comment }));
     }
     Ok(list.into())
 }