use rs_teststand::{Engine, User, UserPrivilege};
fn report_privileges(user: &User, privileges: &[UserPrivilege]) -> Result<(), rs_teststand::Error> {
for privilege in privileges {
println!(
" {:<20} {}",
privilege.name(),
user.has_privilege(*privilege)?
);
}
Ok(())
}
fn main() -> Result<(), rs_teststand::Error> {
let engine = Engine::new()?;
let user = engine.new_user(None)?;
user.set_login_name("operator1")?;
user.set_full_name("Test Operator")?;
user.set_password("ts-secret")?;
println!("User: {} ({})", user.login_name()?, user.full_name()?);
println!(
" password 'ts-secret' valid: {}",
user.validate_password("ts-secret")?
);
println!(
" password 'wrong' valid: {}",
user.validate_password("wrong")?
);
println!(" privilege checks:");
report_privileges(
&user,
&[
UserPrivilege::Operate,
UserPrivilege::Execute,
UserPrivilege::Develop,
UserPrivilege::Debug,
UserPrivilege::EditUsers,
],
)?;
println!(
" Debug.RunSelectedTests: {}",
user.has_privilege_named("Debug.RunSelectedTests")?
);
let privileges = user.privileges()?;
let count = privileges.get_num_sub_properties("")?;
println!(" privilege tree ({count} categories):");
for index in 0..count {
let name = privileges.get_nth_sub_property_name("", index, 0)?;
let members = privileges
.get_property_object(&name, 0)?
.get_num_sub_properties("")?;
println!(" {name:<12} {members} member(s)");
}
println!("\nStation:");
match engine.current_user()? {
Some(current) => println!(" logged in as {}", current.login_name()?),
None => println!(" nobody logged in (usual when login is not required)"),
}
println!(
" is 'operator1' a real account here? {}",
engine.user_name_exists("operator1")?
);
let users_file = engine.users_file()?;
let file = users_file.as_property_object_file()?;
println!(
"
Users file:"
);
println!(" path {}", file.path()?);
println!(
" users {}",
users_file.user_list()?.get_num_elements()?
);
println!(
" groups {}",
users_file.user_group_list()?.get_num_elements()?
);
println!(
" profiles {}",
users_file.user_profile_list()?.get_num_elements()?
);
println!(
"
(this example does not write; enrolling a user would alter the station)"
);
Ok(())
}