# gen-p-code **Repository Path**: yanwc/gen-p-code ## Basic Information - **Project Name**: gen-p-code - **Description**: 权限码生成 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-07-22 - **Last Updated**: 2025-01-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 背景 配合后台管理的权限code与url的自动注册和授权 # 使用方式 1. 插件安装 - go install gitee.com/yanwc/gen-p-code 2. 在api文件中定义如下 test.api 文件: ``` @server( prefix:/user ) service test-api { @doc( summary: "注册" pcode:"system:user:register" pgroup:"system:user" pdesc:"用户注册" pscope:"all" ) @handler register post /register (RegisterReq) } ``` - summary: code中文名称 - pcode: code定义 - pgroup: 组名称,可空 - pdesc: 详细描述 - pscope:授权范围:可授给所有的租户(all);默认租户(default) 3. 执行插件 在项目api同级目录执行 ```sh goctl api plugin -p gen-p-code --api test.api ``` 4.检查生成文件 在项目目录internal/svc/会生成文件upsertpermissioncode.go 5. 在项目入口出添加如下代码: ```go func main() { flag.Parse() var c config.Config conf.MustLoad(*configFile, &c) server := rest.MustNewServer(c.RestConf) defer server.Stop() ctx := svc.NewServiceContext(c) handler.RegisterHandlers(server, ctx) svc.UpsertPermissionCode(ctx) //此处添加的生成的代码 fmt.Printf("Starting server at %s:%d...\n", c.Host, c.Port) server.Start() } ``` ## 注意:需要依赖system中的 system.PermissionClient rpc客户端,样例代码如下: ```go type ServiceContext struct { Config config.Config RpcAuthClient system.AuthClient RpcPermission system.PermissionClient TokenHandleMiddleware rest.Middleware } func NewServiceContext(c config.Config) *ServiceContext { conn := zrpc.MustNewClient(c.RpcSystem).Conn() return &ServiceContext{ Config: c, RpcAuthClient: system.NewAuthClient(conn), RpcPermission: system.NewPermissionClient(conn), TokenHandleMiddleware: middleware.NewTokenHandleMiddleware().Handle, } } ``` 参考: https://blog.csdn.net/xingzuo_1840/article/details/126590348#31__185