zabbix_api/usergroup/
model.rs

1use serde::{Deserialize, Serialize};
2use crate::user::model::ZabbixUser;
3
4/// Represents the permissions for a host group or template group within a user group.
5/// Corresponds to the "Permission" object in Zabbix API documentation.
6#[derive(Serialize, Deserialize, Debug, Clone, Default)]
7pub struct UserGroupPermission {
8    /// ID of the host group or template group.
9    pub id: String,
10    /// Access level to the host group or template group.
11    /// Possible values:
12    /// 0 - access denied;
13    /// 2 - read-only access;
14    /// 3 - read-write access.
15    pub permission: i32,
16}
17
18#[derive(Serialize, Deserialize, Debug, Clone)]
19pub struct ZabbixUserGroup {
20    #[serde(rename = "usrgrpid")]
21    pub usrgrp_id: String,
22    pub name: String,
23    #[serde(skip_serializing_if = "Option::is_none")]
24    pub gui_access: Option<String>,
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub users_status: Option<String>,
27    #[serde(skip_serializing_if = "Option::is_none")]
28    pub debug_mode: Option<String>,
29    #[serde(skip_serializing_if = "Option::is_none")]
30    pub users: Option<Vec<ZabbixUser>>,
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub rights: Option<Vec<UserGroupPermission>>,
33}
34
35/// Represents a tag-based permission for a user group.
36/// Corresponds to the "Tag-based permission" object in Zabbix API documentation.
37#[derive(Serialize, Deserialize, Debug, Clone, Default)]
38pub struct UserGroupTagFilter {
39    /// ID of the host group to add permission to.
40    pub groupid: String,
41    /// Tag name.
42    pub tag: String,
43    /// Tag value.
44    pub value: String,
45}
46
47/// Represents a user to be added to a user group.
48/// Only the `userid` property is required.
49#[derive(Serialize, Deserialize, Debug, Clone, Default)]
50pub struct UserGroupUser {
51    #[serde(rename = "userid")]
52    pub user_id: String,
53}
54
55/// Parameters for the `usergroup.create` API method.
56/// See: https://www.zabbix.com/documentation/current/en/manual/api/reference/usergroup/create
57#[derive(Serialize, Deserialize, Debug, Clone, Default)]
58pub struct CreateUserGroupRequest {
59    /// Name of the user group.
60    pub name: String,
61
62    /// (optional) Whether debug mode is enabled or disabled.
63    /// 0 - (default) disabled;
64    /// 1 - enabled.
65    #[serde(skip_serializing_if = "Option::is_none")]
66    pub debug_mode: Option<i32>,
67
68    /// (optional) Frontend authentication method of the users in the group.
69    /// 0 - (default) use the system default authentication method;
70    /// 1 - use internal authentication;
71    /// 2 - use LDAP authentication;
72    /// 3 - disable access to the frontend.
73    #[serde(skip_serializing_if = "Option::is_none")]
74    pub gui_access: Option<i32>,
75
76    /// (optional) Whether the user group is enabled or disabled.
77    /// 0 - (default) enabled;
78    /// 1 - disabled.
79    #[serde(skip_serializing_if = "Option::is_none")]
80    pub users_status: Option<i32>,
81
82    /// (optional) Host group permissions to assign to the user group.
83    #[serde(skip_serializing_if = "Option::is_none")]
84    pub hostgroup_rights: Option<Vec<UserGroupPermission>>,
85
86    /// (optional) Template group permissions to assign to the user group.
87    #[serde(skip_serializing_if = "Option::is_none")]
88    pub templategroup_rights: Option<Vec<UserGroupPermission>>,
89
90    /// (optional) Tag-based permissions to assign to the user group.
91    #[serde(skip_serializing_if = "Option::is_none")]
92    pub tag_filters: Option<Vec<UserGroupTagFilter>>,
93
94    /// (optional) Users to add to the user group.
95    #[serde(skip_serializing_if = "Option::is_none")]
96    pub users: Option<Vec<UserGroupUser>>,
97}
98
99/// Response structure for the `usergroup.create` API method.
100#[derive(Serialize, Deserialize, Debug, Clone)]
101pub struct CreateUserGroupResponse {
102    #[serde(rename = "usrgrpids")]
103    pub user_group_ids: Vec<String>,
104}