Golang Proxy代理模式权限控制示例

代理模式通过代理结构体控制对真实服务的访问,示例中定义Service接口及其实现RealService,ProxyService在DoWork前检查role权限,仅admin可执行操作,guest则被拒绝,从而实现权限校验逻辑与业务分离。

golang proxy代理模式权限控制示例

在 Go 语言中,代理模式(Proxy Pattern)常用于控制对真实对象的访问,特别适合实现权限校验、日志记录、缓存等横切逻辑。下面通过一个简单的权限控制示例,展示如何使用代理模式来限制对某个服务方法的调用。

定义服务接口

我们先定义一个通用的服务接口,表示需要被代理的目标对象:

type Service interface {    DoWork() string}

这个接口只有一个方法 DoWork,代表某个受保护的操作。

实现真实服务对象

这是实际处理业务逻辑的结构体:

立即学习“go语言免费学习笔记(深入)”;

type RealService struct{}func (r *RealService) DoWork() string {    return "工作已完成"}

RealService 实现了 Service 接口,执行真正的业务操作。

创建代理并加入权限控制

代理结构体持有真实服务的引用,并在调用前进行权限判断:

Shakker Shakker

多功能AI图像生成和编辑平台

Shakker 103 查看详情 Shakker

type ProxyService struct {    realService *RealService    role        string // 用户角色,如 "admin" 或 "guest"}func (p *ProxyService) DoWork() string {    if p.role != "admin" {        return "拒绝访问:权限不足"    }    return p.realService.DoWork()}

代理在调用 DoWork 前检查用户角色,只有 admin 才能执行真实操作。

使用示例

下面是完整调用过程:

func main() {    real := &RealService{}        // 模拟管理员访问    proxyAdmin := &ProxyService{realService: real, role: "admin"}    fmt.Println(proxyAdmin.DoWork()) // 输出:工作已完成    // 模拟普通用户访问    proxyGuest := &ProxyService{realService: real, role: "guest"}    fmt.Println(proxyGuest.DoWork()) // 输出:拒绝访问:权限不足}

通过改变代理中的 role 字段,可以动态控制访问权限,而无需修改真实服务逻辑。

这种结构使得权限控制与业务逻辑解耦,便于扩展和维护。你也可以在此基础上增加日志、计数、延迟加载等功能。

基本上就这些,代理模式在权限场景下非常实用,代码清晰且易于测试。

以上就是Golang Proxy代理模式权限控制示例的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1134089.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
MySQL优化常用方法
上一篇 2025年12月2日 17:33:00
如何用 CSS 伪元素在 Div 中创建垂直居中的分隔线?
下一篇 2025年12月2日 17:33:08

相关推荐

发表回复

登录后才能评论
关注微信