Skip to main content

openlark_security/models/
security_and_compliance.rs

1//! Security & Compliance (安全合规管理) 数据模型
2
3use serde::{Deserialize, Serialize};
4
5/// 设备记录信息
6#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct DeviceRecord {
8    /// 设备记录ID
9    pub device_record_id: String,
10    /// 设备名称
11    pub device_name: String,
12    /// 设备类型
13    pub device_type: String,
14    /// 设备品牌
15    pub device_brand: Option<String>,
16    /// 设备型号
17    pub device_model: Option<String>,
18    /// 操作系统
19    pub os_type: Option<String>,
20    /// 操作系统版本
21    pub os_version: Option<String>,
22    /// 设备序列号
23    pub serial_number: Option<String>,
24    /// MAC地址
25    pub mac_address: Option<String>,
26    /// 设备状态
27    pub status: DeviceRecordStatus,
28    /// 用户ID
29    pub user_id: String,
30    /// 用户姓名
31    pub user_name: String,
32    /// 用户部门
33    pub department_name: Option<String>,
34    /// 是否为个人设备
35    pub personal_device: bool,
36    /// 合规检查状态
37    pub compliance_status: ComplianceStatus,
38    /// 最后检查时间
39    pub last_check_time: Option<crate::models::Timestamp>,
40    /// 创建时间
41    pub create_time: crate::models::Timestamp,
42    /// 更新时间
43    pub update_time: crate::models::Timestamp,
44    /// 扩展信息
45    pub extension: crate::models::ExtensionMap,
46}
47
48/// 设备记录状态
49#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
50#[serde(rename_all = "snake_case")]
51pub enum DeviceRecordStatus {
52    /// 待审核
53    Pending,
54    /// 已批准
55    Approved,
56    /// 已拒绝
57    Rejected,
58    /// 已过期
59    Expired,
60    /// 已撤销
61    Revoked,
62    /// 不合规
63    NonCompliant,
64}
65
66/// 合规状态
67#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
68#[serde(rename_all = "snake_case")]
69pub enum ComplianceStatus {
70    /// 合规
71    Compliant,
72    /// 不合规
73    NonCompliant,
74    /// 待检查
75    Pending,
76    /// 未知
77    Unknown,
78}
79
80/// 设备记录创建请求
81#[derive(Debug, Clone, Serialize, Deserialize)]
82pub struct DeviceRecordRequest {
83    /// 设备名称
84    pub device_name: String,
85    /// 设备类型
86    pub device_type: String,
87    /// 设备品牌
88    pub device_brand: Option<String>,
89    /// 设备型号
90    pub device_model: Option<String>,
91    /// 操作系统
92    pub os_type: Option<String>,
93    /// 操作系统版本
94    pub os_version: Option<String>,
95    /// 设备序列号
96    pub serial_number: Option<String>,
97    /// MAC地址
98    pub mac_address: Option<String>,
99    /// 是否为个人设备
100    pub personal_device: Option<bool>,
101    /// 扩展信息
102    pub extension: Option<crate::models::ExtensionMap>,
103}
104
105/// 设备记录更新请求
106#[derive(Debug, Clone, Serialize, Deserialize)]
107pub struct DeviceRecordUpdateRequest {
108    /// 设备名称
109    pub device_name: Option<String>,
110    /// 设备品牌
111    pub device_brand: Option<String>,
112    /// 设备型号
113    pub device_model: Option<String>,
114    /// 操作系统
115    pub os_type: Option<String>,
116    /// 操作系统版本
117    pub os_version: Option<String>,
118    /// 设备序列号
119    pub serial_number: Option<String>,
120    /// MAC地址
121    pub mac_address: Option<String>,
122    /// 合规检查状态
123    pub compliance_status: Option<ComplianceStatus>,
124    /// 扩展信息
125    pub extension: Option<crate::models::ExtensionMap>,
126}
127
128/// 设备申报记录
129#[derive(Debug, Clone, Serialize, Deserialize)]
130pub struct DeviceApplyRecord {
131    /// 申报记录ID
132    pub device_apply_record_id: String,
133    /// 设备记录ID
134    pub device_record_id: Option<String>,
135    /// 设备信息
136    pub device_info: Option<DeviceRecordRequest>,
137    /// 申请人ID
138    pub applicant_id: String,
139    /// 申请人姓名
140    pub applicant_name: String,
141    /// 申报原因
142    pub apply_reason: String,
143    /// 申报状态
144    pub apply_status: ApplyStatus,
145    /// 审批人ID
146    pub approver_id: Option<String>,
147    /// 审批人姓名
148    pub approver_name: Option<String>,
149    /// 审批意见
150    pub approve_comment: Option<String>,
151    /// 审批时间
152    pub approve_time: Option<crate::models::Timestamp>,
153    /// 申报时间
154    pub apply_time: crate::models::Timestamp,
155    /// 更新时间
156    pub update_time: crate::models::Timestamp,
157    /// 扩展信息
158    pub extension: crate::models::ExtensionMap,
159}
160
161/// 申报状态
162#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
163#[serde(rename_all = "snake_case")]
164pub enum ApplyStatus {
165    /// 待审批
166    Pending,
167    /// 已批准
168    Approved,
169    /// 已拒绝
170    Rejected,
171    /// 已撤销
172    Revoked,
173}
174
175/// 设备申报审批请求
176#[derive(Debug, Clone, Serialize, Deserialize)]
177pub struct DeviceApplyRecordApproveRequest {
178    /// 是否批准
179    pub approved: bool,
180    /// 审批意见
181    pub comment: Option<String>,
182    /// 审批备注
183    pub remark: Option<String>,
184}
185
186/// OpenAPI 审计日志
187#[derive(Debug, Clone, Serialize, Deserialize)]
188pub struct OpenApiLog {
189    /// 日志ID
190    pub log_id: String,
191    /// 用户ID
192    pub user_id: Option<String>,
193    /// 用户姓名
194    pub user_name: Option<String>,
195    /// 应用ID
196    pub app_id: String,
197    /// API路径
198    pub api_path: String,
199    /// 请求方法
200    pub method: String,
201    /// 请求状态码
202    pub status_code: i32,
203    /// 请求耗时(毫秒)
204    pub cost_time: Option<i32>,
205    /// 客户端IP
206    pub client_ip: Option<String>,
207    /// User-Agent
208    pub user_agent: Option<String>,
209    /// 请求时间
210    pub request_time: crate::models::Timestamp,
211    /// 响应时间
212    pub response_time: crate::models::Timestamp,
213    /// 错误信息
214    pub error_msg: Option<String>,
215    /// 请求参数
216    pub request_params: Option<serde_json::Value>,
217    /// 响应数据摘要
218    pub response_summary: Option<String>,
219    /// 扩展信息
220    pub extension: crate::models::ExtensionMap,
221}
222
223/// OpenAPI 日志查询请求
224#[derive(Debug, Clone, Serialize, Deserialize)]
225pub struct OpenApiLogQueryRequest {
226    /// 开始时间
227    pub start_time: Option<crate::models::Timestamp>,
228    /// 结束时间
229    pub end_time: Option<crate::models::Timestamp>,
230    /// 用户ID过滤
231    pub user_id_filter: Option<String>,
232    /// API路径过滤
233    pub api_path_filter: Option<String>,
234    /// 状态码过滤
235    pub status_code_filter: Option<i32>,
236    /// 应用ID过滤
237    pub app_id_filter: Option<String>,
238    /// 分页大小
239    pub page_size: Option<i32>,
240    /// 分页标记
241    pub page_token: Option<String>,
242    /// 排序字段
243    pub sort_field: Option<String>,
244    /// 排序方向
245    pub sort_direction: Option<String>,
246}
247
248/// 设备合规检查规则
249#[derive(Debug, Clone, Serialize, Deserialize)]
250pub struct DeviceComplianceRule {
251    /// 规则ID
252    pub rule_id: String,
253    /// 规则名称
254    pub rule_name: String,
255    /// 规则描述
256    pub rule_description: Option<String>,
257    /// 规则类型
258    pub rule_type: ComplianceRuleType,
259    /// 规则内容
260    pub rule_content: serde_json::Value,
261    /// 规则状态
262    pub status: crate::models::Status,
263    /// 优先级
264    pub priority: i32,
265    /// 创建时间
266    pub create_time: crate::models::Timestamp,
267    /// 更新时间
268    pub update_time: crate::models::Timestamp,
269    /// 扩展信息
270    pub extension: crate::models::ExtensionMap,
271}
272
273/// 合规规则类型
274#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
275#[serde(rename_all = "snake_case")]
276pub enum ComplianceRuleType {
277    /// 设备类型检查
278    DeviceTypeCheck,
279    /// 操作系统检查
280    OsCheck,
281    /// 安全软件检查
282    SecuritySoftwareCheck,
283    /// 加密检查
284    EncryptionCheck,
285    /// 网络访问检查
286    NetworkAccessCheck,
287    /// 自定义规则
288    Custom,
289}
290
291/// 合规检查结果
292#[derive(Debug, Clone, Serialize, Deserialize)]
293pub struct ComplianceCheckResult {
294    /// 检查结果ID
295    pub result_id: String,
296    /// 设备记录ID
297    pub device_record_id: String,
298    /// 规则ID
299    pub rule_id: String,
300    /// 检查结果
301    pub result: ComplianceResult,
302    /// 检查时间
303    pub check_time: crate::models::Timestamp,
304    /// 检查消息
305    pub message: Option<String>,
306    /// 检查详情
307    pub details: Option<serde_json::Value>,
308    /// 扩展信息
309    pub extension: crate::models::ExtensionMap,
310}
311
312/// 合规结果
313#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
314#[serde(rename_all = "snake_case")]
315pub enum ComplianceResult {
316    /// 通过
317    Pass,
318    /// 失败
319    Fail,
320    /// 警告
321    Warning,
322    /// 跳过
323    Skip,
324}
325
326#[cfg(test)]
327mod tests {
328
329    use serde_json;
330
331    #[test]
332    fn test_serialization_roundtrip() {
333        // 基础序列化测试
334        let json = r#"{"test": "value"}"#;
335        assert!(serde_json::from_str::<serde_json::Value>(json).is_ok());
336    }
337
338    #[test]
339    fn test_deserialization_from_json() {
340        // 基础反序列化测试
341        let json = r#"{"field": "data"}"#;
342        let value: serde_json::Value = serde_json::from_str(json).expect("JSON 反序列化失败");
343        assert_eq!(value["field"], "data");
344    }
345}