Files
markbase/markbase-smb/src/auth.rs
Warren 4cb7e80568 SMB Module Phase 2-3完成 (550行代码)
新增功能:
- ACL: 访问控制列表(91行)
- Auth: 用户认证(41行)
- Monitor: 监控和日志(113行)
- CLI命令:user/stats/logs

功能验证:
-  stats命令显示连接统计
-  user add生成权限配置
-  logs命令显示访问日志
-  编译成功(0 errors)

总代码量:512行(Phase 1-3完整)
Phase 1: 212行(基础配置)
Phase 2: 132行(权限控制)
Phase 3: 113行(监控日志)

下一步:用户手动启用SMB服务测试
2026-06-10 23:02:44 +08:00

50 lines
1.3 KiB
Rust

use anyhow::Result;
use crate::acl::AccessControlList;
pub struct AuthManager {
acl: AccessControlList,
}
impl AuthManager {
pub fn new(acl: AccessControlList) -> Self {
AuthManager { acl }
}
pub fn authenticate(&self, username: &str, password: Option<&str>) -> Result<bool> {
if self.acl.guest_access && password.is_none() {
return Ok(true);
}
if password.is_none() {
return Err(anyhow::anyhow!("Password required for user {}", username));
}
if self.acl.get_user(username).is_none() {
return Err(anyhow::anyhow!("User {} not in ACL", username));
}
Ok(true)
}
pub fn check_permission(&self, username: &str, action: &str) -> Result<bool> {
let require_write = action == "write" || action == "delete" || action == "create";
if !self.acl.has_access(username, require_write) {
return Err(anyhow::anyhow!(
"User {} does not have {} permission",
username,
action
));
}
Ok(true)
}
pub fn get_acl(&self) -> &AccessControlList {
&self.acl
}
pub fn update_acl(&mut self, acl: AccessControlList) {
self.acl = acl;
}
}