Golang代理模式实现访问控制详解
作者:QuietDream
时间:2025-10-15
浏览:0
代理模式通过代理对象控制对真实对象的访问,首先定义统一接口Resource,再由RealResource实现具体逻辑,ProxyResource持有RealResource引用并在Access方法中进行权限校验,允许admin和editor访问,其他用户被拒绝,从而实现权限控制与业务逻辑分离。
代理模式通过代理对象控制对真实对象的访问,首先定义统一接口Resource,再由RealResource实现具体逻辑,ProxyResource持有RealResource引用并在Access方法中进行权限校验,允许admin和editor访问,其他用户被拒绝,从而实现权限控制与业务逻辑分离。

在Go语言中,代理模式(Proxy Pattern)常用于控制对某个对象的访问,比如加入权限校验、日志记录或延迟初始化。实现代理模式控制访问权限的核心思路是:通过一个代理对象包装真实对象,在调用真实方法前进行权限判断。
定义接口统一行为
为了让代理对象和真实对象可以互换使用,先定义一个公共接口:
type Resource interface {
Access(userID string) string
}
这个接口表示一个受保护资源,只有特定用户才能访问。
实现真实资源对象
真实对象实现具体逻辑,不关心权限控制:
type RealResource struct{}
func (r *RealResource) Access(userID string) string {
return "敏感数据已访问,用户:" + userID
}
实现代理进行权限检查
代理对象持有真实对象的引用,并在调用前进行权限验证:
type ProxyResource struct {
realResource *RealResource
allowedUsers map[string]bool
}
func NewProxyResource() *ProxyResource {
return &ProxyResource{
realResource: &RealResource{},
allowedUsers: map[string]bool{
"admin": true,
"editor": true,
},
}
}
func (p *ProxyResource) Access(userID string) string {
if !p.allowedUsers[userID] {
return "拒绝访问:用户 " + userID + " 权限不足"
}
return p.realResource.Access(userID)
}
使用示例
客户端代码无需知道使用的是代理还是真实对象:
func main() {
resource := NewProxyResource()
fmt.Println(resource.Access("admin")) // 允许访问
fmt.Println(resource.Access("guest")) // 拒绝访问
}
这种方式将权限控制逻辑与业务逻辑分离,符合单一职责原则。代理模式在需要统一鉴权、审计或远程资源访问控制时非常实用。
基本上就这些,结构清晰且易于扩展。
作者最新文章
高通骁龙8至尊版Gen6实物图曝光:侧置DRAM与HPB散热结构解析
2026-09-08 17:07
电影剪辑实战:镜头组织、节奏控制与声音衔接技巧
2026-09-04 09:27
RedmiNote13Pro+桌面动画怎么设置 RedmiNote13Pro+桌面动画设置方法
2026-08-25 14:24
Snap推出新一代SPECS增强现实眼镜 售价2195美元
2026-08-25 10:04
一加 Nord Buds 4 耳机规格公布:52dB 主动降噪、12mm 动圈单元,6 月 25 日海外发布
2026-08-25 09:55
上一篇:
夸克小说网官网入口及访问指南
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多


































