diff --git a/server/src/handlers/http/rbac.rs b/server/src/handlers/http/rbac.rs index c50ff12de..04dd4822f 100644 --- a/server/src/handlers/http/rbac.rs +++ b/server/src/handlers/http/rbac.rs @@ -16,6 +16,8 @@ * */ +use std::collections::HashSet; + use crate::{ option::CONFIG, rbac::{ @@ -124,7 +126,8 @@ pub async fn put_role( ) -> Result { let username = username.into_inner(); let role = role.into_inner(); - let role: Vec = serde_json::from_value(role)?; + let role: HashSet = serde_json::from_value(role)?; + let role = role.into_iter().collect(); if !Users.contains(&username) { return Err(RBACError::UserDoesNotExist); diff --git a/server/src/rbac/role.rs b/server/src/rbac/role.rs index 8a5e79911..7f03e040a 100644 --- a/server/src/rbac/role.rs +++ b/server/src/rbac/role.rs @@ -104,7 +104,7 @@ impl RoleBuilder { pub mod model { use super::{Action, RoleBuilder}; - #[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] + #[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize, Hash)] #[serde(tag = "privilege", content = "resource", rename_all = "lowercase")] pub enum DefaultPrivilege { Admin,