mirror of
https://github.com/kanidm/kanidm.git
synced 2025-02-23 12:37:00 +01:00
begin reworking
This commit is contained in:
parent
2e3f4f30ae
commit
998e56d648
|
@ -792,6 +792,37 @@ impl DbTxn<'_> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_user_groups(&mut self, a_uuid: Uuid) -> Result<Vec<GroupToken>, CacheError> {
|
||||||
|
let mut stmt = self
|
||||||
|
.conn
|
||||||
|
.prepare("SELECT group_t.token FROM (group_t, memberof_t) WHERE group_t.uuid = memberof_t.g_uuid AND memberof_t.a_uuid = :a_uuid")
|
||||||
|
.map_err(|e| {
|
||||||
|
self.sqlite_error("select prepare", &e)
|
||||||
|
})?;
|
||||||
|
|
||||||
|
let data_iter = stmt
|
||||||
|
.query_map([a_uuid.as_hyphenated().to_string()], |row| row.get(0))
|
||||||
|
.map_err(|e| self.sqlite_error("query_map", &e))?;
|
||||||
|
let data: Result<Vec<Vec<u8>>, _> = data_iter
|
||||||
|
.map(|v| v.map_err(|e| self.sqlite_error("map", &e)))
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
let data = data?;
|
||||||
|
|
||||||
|
Ok(data
|
||||||
|
.iter()
|
||||||
|
.filter_map(|token| {
|
||||||
|
// token convert with json.
|
||||||
|
// trace!("{:?}", token);
|
||||||
|
serde_json::from_slice(token.as_slice())
|
||||||
|
.map_err(|e| {
|
||||||
|
error!("json error -> {:?}", e);
|
||||||
|
})
|
||||||
|
.ok()
|
||||||
|
})
|
||||||
|
.collect())
|
||||||
|
}
|
||||||
|
|
||||||
pub fn get_group_members(&mut self, g_uuid: Uuid) -> Result<Vec<UserToken>, CacheError> {
|
pub fn get_group_members(&mut self, g_uuid: Uuid) -> Result<Vec<UserToken>, CacheError> {
|
||||||
let mut stmt = self
|
let mut stmt = self
|
||||||
.conn
|
.conn
|
||||||
|
|
|
@ -576,6 +576,17 @@ impl Resolver {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn get_usergroups(&self, g_uuid: Uuid) -> Vec<String> {
|
||||||
|
let mut dbtxn = self.db.write().await;
|
||||||
|
|
||||||
|
dbtxn
|
||||||
|
.get_user_groups(g_uuid)
|
||||||
|
.unwrap_or_else(|_| Vec::new())
|
||||||
|
.into_iter()
|
||||||
|
.map(|gt| self.token_gidattr(>))
|
||||||
|
.collect()
|
||||||
|
}
|
||||||
|
|
||||||
async fn get_groupmembers(&self, g_uuid: Uuid) -> Vec<String> {
|
async fn get_groupmembers(&self, g_uuid: Uuid) -> Vec<String> {
|
||||||
let mut dbtxn = self.db.write().await;
|
let mut dbtxn = self.db.write().await;
|
||||||
|
|
||||||
|
@ -737,12 +748,14 @@ impl Resolver {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_nssgroups_member_name(&self, account_id: &str) -> Result<Vec<NssGroup>, ()> {
|
pub async fn get_nssgroups_member_name(&self, account_id: &str) -> Result<Vec<NssGroup>, ()> {
|
||||||
let account_name = account_id.to_string();
|
if let Some(nss_user) = self.get_nssaccount(&account_id).await {
|
||||||
Ok(self.get_nssgroups().await.
|
Ok(self.get_usergroups(nss_user).await
|
||||||
unwrap_or_else(|_| Vec::new())
|
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.filter(|g| g.members.contains(&account_name))
|
.map(|g| self.token_gidattr(&g))
|
||||||
.collect())
|
.collect())
|
||||||
|
} else {
|
||||||
|
Ok(Vec::new())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn get_nssgroup(&self, grp_id: Id) -> Result<Option<NssGroup>, ()> {
|
async fn get_nssgroup(&self, grp_id: Id) -> Result<Option<NssGroup>, ()> {
|
||||||
|
|
Loading…
Reference in a new issue