您的位置 首页 编程知识

如何在Golang中实现代理模式控制访问权限

代理模式通过代理对象控制对真实对象的访问,首先定义统一接口Resource,再由RealResource实现具…


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

如何在Golang中实现代理模式控制访问权限

在Go语言中,代理模式(Proxy Pattern)常用于控制对某个对象的访问,比如加入权限校验、日志记录或延迟初始化。实现代理模式控制访问权限的核心思路是:通过一个代理对象包装真实对象,在调用真实方法前进行权限判断。

定义接口统一行为

为了让代理对象和真实对象可以互换使用,先定义一个公共接口:

 type Resource interface {     Access(userID string) string } 
登录后复制

这个接口表示一个受保护资源,只有特定用户才能访问。

实现真实资源对象

真实对象实现具体逻辑,不关心权限控制:

立即学习“”;

如知笔记——支持markdown的在线笔记,支持ai智能写作、AI搜索,支持DeepseekR1满血大模型

如何在Golang中实现代理模式控制访问权限 27

 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"))   // 拒绝访问 } 
登录后复制

这种方式将权限控制逻辑与业务逻辑分离,符合单一职责原则。代理模式在需要统一鉴权、审计或远程资源访问控制时非常实用。

基本上就这些,结构清晰且易于扩展。

以上就是如何在Golang中实现代理模式控制访问权限的详细内容,更多请关注php中文网其它相关文章!

相关标签:

大家都在看:

本文来自网络,不代表四平甲倪网络网站制作专家立场,转载请注明出处:http://www.elephantgpt.cn/16207.html

作者: nijia

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

联系我们

18844404989

在线咨询: QQ交谈

邮箱: 641522856@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部