当前位置: 首页 > news >正文

儿童网站建设互联网怎么学

儿童网站建设,互联网怎么学,通信工程师,百度人工服务24小时上一节讲解了后台Rbac微服务角色增删改查微服务,这里讲解权限管理Rbac微服务管理员的增删改查微服务以及管理员和角色关联微服务功能 一.实现后台权限管理Rbac之管理员增删改查微服务服务端功能 1.创建Manager模型 要实现管理员的增删改查,就需要创建对应的模型,故在server/r… 上一节讲解了后台Rbac微服务角色增删改查微服务,这里讲解权限管理Rbac微服务管理员的增删改查微服务以及管理员和角色关联微服务功能 一.实现后台权限管理Rbac之管理员增删改查微服务服务端功能 1.创建Manager模型  要实现管理员的增删改查,就需要创建对应的模型,故在server/rbac/models下创建manager.go模型文件,参考[golang gin框架] 14.Gin 商城项目-RBAC管理代码如下:  package models//管理员表type Manager struct { // 结构体首字母大写, 和数据库表名对应, 默认访问数据表users, 可以设置访问数据表的方法Id intUsername stringPassword stringMobile stringEmail stringStatus intRoleId intAddTime intIsSuper intRole Role gorm:foreignKey:RoleId;references:Id // 配置关联关系 }//配置数据库操作的表名称 func (Manager) TableName() string {return manager } 2.在proto文件夹下创建rbacManager.proto 参考[golang gin框架] 14.Gin 商城项目-RBAC管理,创建rbacManager.proto.生成管理员相关方法,具体代码如下: syntax proto3;package manager;option go_package ./proto/rbacManager;//管理员管理微服务rpc方法 service RbacManager {//获取管理员rpc方法: 请求参数ManagerGetRequest, 响应参数ManagerGetResponserpc ManagerGet(ManagerGetRequest) returns (ManagerGetResponse) {}//增加管理员rpc方法: 请求参数ManagerAddRequest, 响应参数ManagerAddResponserpc ManagerAdd(ManagerAddRequest) returns (ManagerAddResponse) {}//编辑管理员rpc方法: 请求参数ManagerEditRequest, 响应参数ManagerEditResponserpc ManagerEdit(ManagerEditRequest) returns (ManagerEditResponse) {}//删除管理员rpc方法: 请求参数ManagerDeleteRequest, 响应参数ManagerDeleteResponserpc ManagerDelete(ManagerDeleteRequest) returns (ManagerDeleteResponse) {} }//管理员对应的结构体 message ManagerModel{int64 id1;string username2;string password3;string mobile4;string email5;int64 status 6;int64 roleId7;int64 addTime8;int64 isSuper9;RoleModel role10; // 管理员关联的角色 }//角色对应的结构体 message RoleModel{int64 id1;string title2;string description3;int64 status4;int64 addTime 5; }//获取管理员请求参数, 当传入id或者管理员名称时,获取对应的管理员数据,如果什么都没传入,则获取管理员列表 message ManagerGetRequest{int64 id 1;string username 2; }//获取管理员响应参数 message ManagerGetResponse{repeated ManagerModel ManagerList1; //返回管理员切片 }//增加管理员请求参数 message ManagerAddRequest{string username1;string password2;string mobile3;string email4;int64 status 5;int64 roleId6;int64 addTime7;int64 isSuper8; }//增加管理员响应参数 message ManagerAddResponse{bool success1;string message2; }//编辑管理员请求参数 message ManagerEditRequest{int64 id1;string username2;string password3;string mobile4;string email5;int64 status 6;int64 roleId7;int64 addTime8;int64 isSuper9; }//编辑管理员响应参数 message ManagerEditResponse{bool success1;string message2; }//删除管理员请求参数 message ManagerDeleteRequest{int64 id1; }//删除管理员响应参数 message ManagerDeleteResponse{bool success1;string message2; } 3.生成manager相关pb.go,pb.micro.go文件 在server/rbac下运行命令protoc --proto_path. --micro_out. --go_out:. proto/rbacManager.proto即可 4.在handler文件夹下创建rbacManager.go文件,实现proto中的service方法 参考[golang gin框架] 14.Gin 商城项目-RBAC管理_角色的增删改查方法代码,具体rbacManager.go代码如下: package handlerimport (contextstrconvrbac/modelspb rbac/proto/rbacManager )type RbacManager struct{}//获取管理员 func (e *RbacManager) ManagerGet(ctx context.Context, req *pb.ManagerGetRequest, res *pb.ManagerGetResponse) error {managerList : []models.Manager{}where : 11if req.Id 0 { // 当传入管理员id时,获取对应的管理员数据, 当没有传入管理员id时,获取管理员列表数据where AND id strconv.Itoa(int(req.Id))}if len(req.Username) 0 { //判断是否传入管理员名称where AND username req.Username}models.DB.Where(where).Preload(Role).Find(managerList) //获取管理员数据自己对应的关联角色数据//处理数据var tempList []*pb.ManagerModelfor _, v : range managerList {tempList append(tempList, pb.ManagerModel{Id: int64(v.Id),Username: v.Username,Mobile: v.Mobile,Email: v.Email,Status: int64(v.Status),RoleId: int64(v.RoleId),AddTime: int64(v.AddTime),IsSuper: int64(v.IsSuper),Role: pb.RoleModel{ //角色数据,可根据自己项目情况获取自己想要的数据Title: v.Role.Title,Description: v.Role.Description,},})}res.ManagerList tempListreturn nil }//增加管理员 func (e *RbacManager) ManagerAdd(ctx context.Context, req *pb.ManagerAddRequest, res *pb.ManagerAddResponse) error {//执行增加管理员manager : models.Manager{Username: req.Username,Password: req.Password,Email: req.Email,Mobile: req.Mobile,RoleId: int(req.RoleId),Status: int(req.Status),AddTime: int(req.AddTime),}err : models.DB.Create(manager).Errorif err ! nil {res.Success falseres.Message 增加数据失败} else {res.Success trueres.Message 增加数据成功}return err }//修改管理员 func (e *RbacManager) ManagerEdit(ctx context.Context, req *pb.ManagerEditRequest, res *pb.ManagerEditResponse) error {//执行修改manager : models.Manager{Id: int(req.Id)}models.DB.Find(manager)manager.Username req.Usernamemanager.Email req.Emailmanager.Mobile req.Mobilemanager.RoleId int(req.RoleId)//注意判断密码是否为空 为空表示不修改密码 不为空表示修改密码if req.Password ! {manager.Password req.Password}err : models.DB.Save(manager).Errorif err ! nil {res.Success falseres.Message 修改数据失败} else {res.Success trueres.Message 修改数据成功}return err }//删除管理员 func (e *RbacManager) ManagerDelete(ctx context.Context, req *pb.ManagerDeleteRequest, res *pb.ManagerDeleteResponse) error {manager : models.Manager{Id: int(req.Id)}//这里可以是物理删除或者逻辑删除,根据自己项目情况选择err : models.DB.Delete(manager).Errorif err ! nil {res.Success falseres.Message 删除数据失败} else {res.Success trueres.Message 删除数据成功}return err } 5.在main.go文件中注册管理员微服务 只需在import中引入pbManager rbac/proto/rbacManager以及在main()中加入以下代码即可:  // Register handler:注册管理员微服务if err : pbRole.RegisterRbacManagerHandler(srv.Server(), new(handler.RbacManager)); err ! nil {logger.Fatal(err)} 具体代码如下: package mainimport (rbac/handlerrbac/modelspb rbac/proto/rbacLoginpbRole rbac/proto/rbacRolepbManager rbac/proto/rbacManagergo-micro.dev/v4go-micro.dev/v4/loggergithub.com/go-micro/plugins/v4/registry/consul )var (service rbacversion latest )func main() {//集成consulconsulReg : consul.NewRegistry()// Create service//读取.ini里面的配置addr : models.Config.Section(consul).Key(addr).String()srv : micro.NewService(micro.Address(addr), //指定微服务的ip: 选择注册服务器地址,也可以不配置,默认为本机,也可以选择consul集群中的clientmicro.Name(service),micro.Version(version),//注册consulmicro.Registry(consulReg),)srv.Init(micro.Name(service),micro.Version(version),)// Register handler:注册登录微服务if err : pb.RegisterRbacLoginHandler(srv.Server(), new(handler.RbacLogin)); err ! nil {logger.Fatal(err)}// Register handler:注册角色微服务if err : pbRole.RegisterRbacRoleHandler(srv.Server(), new(handler.RbacRole)); err ! nil {logger.Fatal(err)}// Register handler:注册管理员微服务if err : pbManager.RegisterRbacManagerHandler(srv.Server(), new(handler.RbacManager)); err ! nil {logger.Fatal(err)}// Run serviceif err : srv.Run(); err ! nil {logger.Fatal(err)} } 二.实现后台权限管理Rbac管理员客户端微服务功能 参考[golang gin框架] 41.Gin商城项目-微服务实战之后台Rbac微服务(用户登录 ,Gorm数据库配置单独抽离,Consul配置单独抽离) 1.复制server/rbac/proto文件夹下rbacManager.go以及rbacManager文件夹到client项目中的proto文件夹下  2. 调用Rbac角色增删改查微服务 在controllers/admin/maanger.go的Index(),Add(),DoAdd(),Edit(),DoEdit(),Delete()方法中调用Rbac管理员增删改查微服务功能,这里需要在import中引入rbacRole,rbacManager微服务相关包,代码如下: import (pbManager goshop/proto/rbacManagerpbRole goshop/proto/rbacRole ) 原controllers/admin/manager.go代码如下:也可参考[golang gin框架] 14.Gin 商城项目-RBAC管理 package adminimport (github.com/gin-gonic/gingoshop/modelsnet/httpstrings )type ManagerController struct {BaseController }func (con ManagerController) Index(c *gin.Context) {//获取管理员列表,以及关联对应的角色managerList : []models.Manager{}models.DB.Preload(Role).Find(managerList)c.HTML(http.StatusOK, admin/manager/index.html, gin.H{managerList: managerList,}) }//添加管理员 func (con ManagerController) Add(c *gin.Context) {//获取角色roleList : []models.Role{}models.DB.Find(roleList)c.HTML(http.StatusOK, admin/manager/add.html, gin.H{roleList: roleList,}) }//添加管理员:提交 func (con ManagerController) DoAdd(c *gin.Context) {//获取角色id,判断是否合法roleId, err : models.Int(c.PostForm(role_id))if err ! nil {con.Error(c, 角色不合法, /admin/manager/add)return}//获取提交的表单信息username : strings.Trim(c.PostForm(username), )password : strings.Trim(c.PostForm(password), )email : strings.Trim(c.PostForm(email), )mobile : strings.Trim(c.PostForm(mobile), )//判断用户名和密码是否符合要求if len(username) 2 || len(password) 6 {con.Error(c, 用户名或密码长度不合法, /admin/manager/add)return}//判断管理员是否存在managerList : []models.Manager{}models.DB.Where(username ?, username).Find(managerList)if len(managerList) 0 {con.Error(c, 管理员已存在, /admin/manager/add)return}//实例化Manager,执行增加管理员manager : models.Manager{Username: username,Password: models.Md5(password),Email: email,Mobile: mobile,AddTime: int(models.GetUnix()),RoleId: roleId,Status: 1,}err models.DB.Create(manager).Errorif err ! nil {con.Error(c, 添加管理员失败, /admin/manager/add)return}con.Success(c, 添加管理员成功, /admin/manager) }//编辑管理员 func (con ManagerController) Edit(c *gin.Context) {//获取管理员id, err : models.Int(c.Query(id))if err ! nil {con.Error(c, 传入数据错误, /admin/manager)return}manager : models.Manager{Id: id}models.DB.Find(manager)if manager.Username {con.Error(c, 管理员# models.String(id) 不存在, /admin/manager)return}//获取所有角色roleList : []models.Role{}models.DB.Find(roleList)c.HTML(http.StatusOK, admin/manager/edit.html, gin.H{manager: manager,roleList: roleList,}) }//编辑管理员提交 func (con ManagerController) DoEdit(c *gin.Context) {//获取管理员id,并判断id, err : models.Int(c.PostForm(id))if err ! nil {con.Error(c, 传入数据错误, /admin/manager)return}//获取角色id,并判断roleId, err2 : models.Int(c.PostForm(role_id))if err2 ! nil {con.Error(c, 传入数据错误, /admin/manager)return}//获取提交的表单信息username : strings.Trim(c.PostForm(username), )password : strings.Trim(c.PostForm(password), )email : strings.Trim(c.PostForm(email), )mobile : strings.Trim(c.PostForm(mobile), )//执行修改manager : models.Manager{Id: id}models.DB.Find(manager)manager.Username usernamemanager.Email emailmanager.RoleId roleIdmanager.Mobile mobile//判断密码, 为空 表示不修改密码if password ! {//判断密码长度if len(password) 6 {con.Error(c, 密码长度不合法, /admin/manager/edit?id models.String(id))return}manager.Password models.Md5(password)}//保存err models.DB.Save(manager).Errorif err ! nil {con.Error(c, 修改数据失败, /admin/manager/edit?idmodels.String(id))return}con.Success(c, 修改数据成功, /admin/manager) }//删除 func (con ManagerController) Delete(c *gin.Context) {//获取提交的表单数据id, err : models.Int(c.Query(id))if err ! nil {con.Error(c, 传入数据错误, /admin/manager)return}//查询管理员是否存在manager : models.Manager{Id: id}err models.DB.Delete(manager).Errorif err ! nil {con.Error(c, 删除数据失败, /admin/manager)return}con.Success(c, 删除数据成功, /admin/manager) } (1). 这里需要完善一下 models/tool.go中的UnixToTime()方法 目的是为了根据传入不同类型的时间戳,来返回对应的时间,原方法: //时间戳转换成日期函数 func UnixToTime(timestamp int) string {t : time.Unix(int64(timestamp), 0)return t.Format(2006-01-02 15:04:05) } 完善后的方法: //时间戳转换成日期函数 func UnixToTime(timestamp interface{}) string {value1, ok64 : timestamp.(int64) //类型断言,判断传入的参数数据类型,并根据不同数据类型进行逻辑处理value2, ok32 : timestamp.(int32)value3, ok : timestamp.(int)if ok64 {t : time.Unix(value1, 0)return t.Format(2006-01-02 15:04:05)} else if ok32 {t : time.Unix(int64(value2), 0)return t.Format(2006-01-02 15:04:05)} else if ok {t : time.Unix(int64(value3), 0)return t.Format(2006-01-02 15:04:05)} else {return time error} } (2). Index()方法调用微服务代码 原方法: func (con ManagerController) Index(c *gin.Context) {//获取管理员列表,以及关联对应的角色managerList : []models.Manager{}models.DB.Preload(Role).Find(managerList)c.HTML(http.StatusOK, admin/manager/index.html, gin.H{managerList: managerList,}) } 完善后的方法: func (con ManagerController) Index(c *gin.Context) {//调用Rbac微服务:获取管理员列表,以及关联对应的角色rbacClient : pbManager.NewRbacManagerService(rbac, models.RbacClient)res, _ : rbacClient.ManagerGet(context.Background(), pbManager.ManagerGetRequest{})c.HTML(http.StatusOK, admin/manager/index.html, gin.H{managerList: res.ManagerList,}) } (3).Add()方法调用微服务代码 原方法: //添加管理员 func (con ManagerController) Add(c *gin.Context) {//获取角色roleList : []models.Role{}models.DB.Find(roleList)c.HTML(http.StatusOK, admin/manager/add.html, gin.H{roleList: roleList,}) } 完善后的方法: //添加管理员 func (con ManagerController) Add(c *gin.Context) {//获取所有的角色rbacClient : pbRole.NewRbacRoleService(rbac, models.RbacClient)res, _ : rbacClient.RoleGet(context.Background(), pbRole.RoleGetRequest{})c.HTML(http.StatusOK, admin/manager/add.html, gin.H{roleList: res.RoleList,}) } (4).DoAdd()方法调用微服务代码 原方法: //添加管理员:提交 func (con ManagerController) DoAdd(c *gin.Context) {//获取角色id,判断是否合法roleId, err : models.Int(c.PostForm(role_id))if err ! nil {con.Error(c, 角色不合法, /admin/manager/add)return}//获取提交的表单信息username : strings.Trim(c.PostForm(username), )password : strings.Trim(c.PostForm(password), )email : strings.Trim(c.PostForm(email), )mobile : strings.Trim(c.PostForm(mobile), )//判断用户名和密码是否符合要求if len(username) 2 || len(password) 6 {con.Error(c, 用户名或密码长度不合法, /admin/manager/add)return}//判断管理员是否存在managerList : []models.Manager{}models.DB.Where(username ?, username).Find(managerList)if len(managerList) 0 {con.Error(c, 管理员已存在, /admin/manager/add)return}//实例化Manager,执行增加管理员manager : models.Manager{Username: username,Password: models.Md5(password),Email: email,Mobile: mobile,AddTime: int(models.GetUnix()),RoleId: roleId,Status: 1,}err models.DB.Create(manager).Errorif err ! nil {con.Error(c, 添加管理员失败, /admin/manager/add)return}con.Success(c, 添加管理员成功, /admin/manager) } 完善后的方法: //添加管理员:提交 func (con ManagerController) DoAdd(c *gin.Context) {//获取角色id,判断是否合法roleId, err : models.Int(c.PostForm(role_id))if err ! nil {con.Error(c, 角色不合法, /admin/manager/add)return}//获取提交的表单信息username : strings.Trim(c.PostForm(username), )password : strings.Trim(c.PostForm(password), )email : strings.Trim(c.PostForm(email), )mobile : strings.Trim(c.PostForm(mobile), )//判断用户名和密码是否符合要求if len(username) 2 || len(password) 6 {con.Error(c, 用户名或密码长度不合法, /admin/manager/add)return}//判断管理员是否存在rbacClient : pbManager.NewRbacManagerService(rbac, models.RbacClient)res, _ : rbacClient.ManagerGet(context.Background(), pbManager.ManagerGetRequest{Username: username,})if len(res.ManagerList) 0 {con.Error(c, 此管理员已存在, /admin/manager/add)return}//调用增加管理员微服务方法:执行增加管理员addResult, _ : rbacClient.ManagerAdd(context.Background(), pbManager.ManagerAddRequest{Username: username,Password: models.Md5(password),Email: email,Mobile: mobile,RoleId: int64(roleId),Status: 1,AddTime: int64(models.GetUnix()),})if !addResult.Success {con.Error(c, 添加管理员失败, /admin/manager/add)return}con.Success(c, 增加管理员成功, /admin/manager) } (5).Edit()方法调用微服务代码 原方法: //编辑管理员 func (con ManagerController) Edit(c *gin.Context) {//获取管理员id, err : models.Int(c.Query(id))if err ! nil {con.Error(c, 传入数据错误, /admin/manager)return}manager : models.Manager{Id: id}models.DB.Find(manager)if manager.Username {con.Error(c, 管理员# models.String(id) 不存在, /admin/manager)return}//获取所有角色roleList : []models.Role{}models.DB.Find(roleList)c.HTML(http.StatusOK, admin/manager/edit.html, gin.H{manager: manager,roleList: roleList,}) } 完善后的方法: //编辑管理员 func (con ManagerController) Edit(c *gin.Context) {//获取管理员id, err : models.Int(c.Query(id))if err ! nil {con.Error(c, 传入数据错误, /admin/manager)return}//通过管理员微服务获取管理员//获取管理员managerClient : pbManager.NewRbacManagerService(rbac, models.RbacClient)resManager, _ : managerClient.ManagerGet(context.Background(), pbManager.ManagerGetRequest{Id: int64(id),})if len(resManager.ManagerList) 0 {con.Error(c, 管理员# models.String(id) 不存在, /admin/manager)return}//获取所有的角色roleClient : pbRole.NewRbacRoleService(rbac, models.RbacClient)resRole, _ : roleClient.RoleGet(context.Background(), pbRole.RoleGetRequest{})c.HTML(http.StatusOK, admin/manager/edit.html, gin.H{manager: resManager.ManagerList[0],roleList: resRole.RoleList,}) } (6).DoEdit()方法调用微服务代码 原方法: //编辑管理员提交 func (con ManagerController) DoEdit(c *gin.Context) {//获取管理员id,并判断id, err : models.Int(c.PostForm(id))if err ! nil {con.Error(c, 传入数据错误, /admin/manager)return}//获取角色id,并判断roleId, err2 : models.Int(c.PostForm(role_id))if err2 ! nil {con.Error(c, 传入数据错误, /admin/manager)return}//获取提交的表单信息username : strings.Trim(c.PostForm(username), )password : strings.Trim(c.PostForm(password), )email : strings.Trim(c.PostForm(email), )mobile : strings.Trim(c.PostForm(mobile), )//执行修改manager : models.Manager{Id: id}models.DB.Find(manager)manager.Username usernamemanager.Email emailmanager.RoleId roleIdmanager.Mobile mobile//判断密码, 为空 表示不修改密码if password ! {//判断密码长度if len(password) 6 {con.Error(c, 密码长度不合法, /admin/manager/edit?id models.String(id))return}manager.Password models.Md5(password)}//保存err models.DB.Save(manager).Errorif err ! nil {con.Error(c, 修改数据失败, /admin/manager/edit?idmodels.String(id))return}con.Success(c, 修改数据成功, /admin/manager) } 完善后的方法: //编辑管理员提交 func (con ManagerController) DoEdit(c *gin.Context) {//获取管理员id,并判断id, err : models.Int(c.PostForm(id))if err ! nil {con.Error(c, 传入数据错误, /admin/manager)return}//获取角色id,并判断roleId, err2 : models.Int(c.PostForm(role_id))if err2 ! nil {con.Error(c, 传入数据错误, /admin/manager)return}//获取提交的表单信息username : strings.Trim(c.PostForm(username), )password : strings.Trim(c.PostForm(password), )email : strings.Trim(c.PostForm(email), )mobile : strings.Trim(c.PostForm(mobile), )//执行修改//判断电话号码是否合法if len(mobile) 11 {con.Error(c, mobile长度不合法, /admin/manager/edit?idmodels.String(id))return}//注意判断密码是否为空 为空表示不修改密码 不为空表示修改密码if password ! {//判断密码长度是否合法if len(password) 6 {con.Error(c, 密码的长度不合法 密码长度不能小于6位, /admin/manager/edit?idmodels.String(id))return}password models.Md5(password)}//调用管理员修改微服务方法进行修改managerClient : pbManager.NewRbacManagerService(rbac, models.RbacClient)editResult, _ : managerClient.ManagerEdit(context.Background(), pbManager.ManagerEditRequest{Id: int64(id),Username: username,Password: password,Email: email,Mobile: mobile,RoleId: int64(roleId),})if !editResult.Success {con.Error(c, 修改数据失败, /admin/manager/edit?idmodels.String(id))return}con.Success(c, 修改数据成功, /admin/manager) } (7).Delete()方法调用微服务代码 原方法: //删除 func (con ManagerController) Delete(c *gin.Context) {//获取提交的表单数据id, err : models.Int(c.Query(id))if err ! nil {con.Error(c, 传入数据错误, /admin/manager)return}//查询管理员是否存在manager : models.Manager{Id: id}err models.DB.Delete(manager).Errorif err ! nil {con.Error(c, 删除数据失败, /admin/manager)return}con.Success(c, 删除数据成功, /admin/manager) } 完善后的方法: //删除 func (con ManagerController) Delete(c *gin.Context) {//获取提交的表单数据id, err : models.Int(c.Query(id))if err ! nil {con.Error(c, 传入数据错误, /admin/manager)return}//查询管理员是否存在//获取管理员managerClient : pbManager.NewRbacManagerService(rbac, models.RbacClient)resManager, _ : managerClient.ManagerGet(context.Background(), pbManager.ManagerGetRequest{Id: int64(id),})if len(resManager.ManagerList) 0 {con.Error(c, 管理员# models.String(id) 不存在, /admin/manager)return}//调用管理员删除方法进行删除managerDeleteClient : pbManager.NewRbacManagerService(rbac, models.RbacClient)managerRes, _ : managerDeleteClient.ManagerDelete(context.Background(), pbManager.ManagerDeleteRequest{Id: int64(id),})if managerRes.Success {con.Success(c, 删除数据成功, /admin/manager)return}con.Success(c, 删除数据失败, /admin/manager) } (8).完整代码如下 package adminimport (github.com/gin-gonic/gingoshop/modelspbRole goshop/proto/rbacRolenet/httpstringscontextpbManager goshop/proto/rbacManager )type ManagerController struct {BaseController }func (con ManagerController) Index(c *gin.Context) {//调用Rbac微服务:获取管理员列表,以及关联对应的角色rbacClient : pbManager.NewRbacManagerService(rbac, models.RbacClient)res, _ : rbacClient.ManagerGet(context.Background(), pbManager.ManagerGetRequest{})c.HTML(http.StatusOK, admin/manager/index.html, gin.H{managerList: res.ManagerList,})}//添加管理员 func (con ManagerController) Add(c *gin.Context) {//获取所有的角色rbacClient : pbRole.NewRbacRoleService(rbac, models.RbacClient)res, _ : rbacClient.RoleGet(context.Background(), pbRole.RoleGetRequest{})c.HTML(http.StatusOK, admin/manager/add.html, gin.H{roleList: res.RoleList,}) }//添加管理员:提交 func (con ManagerController) DoAdd(c *gin.Context) {//获取角色id,判断是否合法roleId, err : models.Int(c.PostForm(role_id))if err ! nil {con.Error(c, 角色不合法, /admin/manager/add)return}//获取提交的表单信息username : strings.Trim(c.PostForm(username), )password : strings.Trim(c.PostForm(password), )email : strings.Trim(c.PostForm(email), )mobile : strings.Trim(c.PostForm(mobile), )//判断用户名和密码是否符合要求if len(username) 2 || len(password) 6 {con.Error(c, 用户名或密码长度不合法, /admin/manager/add)return}//判断管理员是否存在rbacClient : pbManager.NewRbacManagerService(rbac, models.RbacClient)res, _ : rbacClient.ManagerGet(context.Background(), pbManager.ManagerGetRequest{Username: username,})if len(res.ManagerList) 0 {con.Error(c, 此管理员已存在, /admin/manager/add)return}//调用增加管理员微服务方法:执行增加管理员addResult, _ : rbacClient.ManagerAdd(context.Background(), pbManager.ManagerAddRequest{Username: username,Password: models.Md5(password),Email: email,Mobile: mobile,RoleId: int64(roleId),Status: 1,AddTime: int64(models.GetUnix()),})if !addResult.Success {con.Error(c, 添加管理员失败, /admin/manager/add)return}con.Success(c, 增加管理员成功, /admin/manager) }//编辑管理员 func (con ManagerController) Edit(c *gin.Context) {//获取管理员id, err : models.Int(c.Query(id))if err ! nil {con.Error(c, 传入数据错误, /admin/manager)return}//通过管理员微服务获取管理员//获取管理员managerClient : pbManager.NewRbacManagerService(rbac, models.RbacClient)resManager, _ : managerClient.ManagerGet(context.Background(), pbManager.ManagerGetRequest{Id: int64(id),})if len(resManager.ManagerList) 0 {con.Error(c, 管理员# models.String(id) 不存在, /admin/manager)return}//获取所有的角色roleClient : pbRole.NewRbacRoleService(rbac, models.RbacClient)resRole, _ : roleClient.RoleGet(context.Background(), pbRole.RoleGetRequest{})c.HTML(http.StatusOK, admin/manager/edit.html, gin.H{manager: resManager.ManagerList[0],roleList: resRole.RoleList,}) }//编辑管理员提交 func (con ManagerController) DoEdit(c *gin.Context) {//获取管理员id,并判断id, err : models.Int(c.PostForm(id))if err ! nil {con.Error(c, 传入数据错误, /admin/manager)return}//获取角色id,并判断roleId, err2 : models.Int(c.PostForm(role_id))if err2 ! nil {con.Error(c, 传入数据错误, /admin/manager)return}//获取提交的表单信息username : strings.Trim(c.PostForm(username), )password : strings.Trim(c.PostForm(password), )email : strings.Trim(c.PostForm(email), )mobile : strings.Trim(c.PostForm(mobile), )//执行修改//判断电话号码是否合法if len(mobile) 11 {con.Error(c, mobile长度不合法, /admin/manager/edit?idmodels.String(id))return}//注意判断密码是否为空 为空表示不修改密码 不为空表示修改密码if password ! {//判断密码长度是否合法if len(password) 6 {con.Error(c, 密码的长度不合法 密码长度不能小于6位, /admin/manager/edit?idmodels.String(id))return}password models.Md5(password)}//调用管理员修改微服务方法进行修改managerClient : pbManager.NewRbacManagerService(rbac, models.RbacClient)editResult, _ : managerClient.ManagerEdit(context.Background(), pbManager.ManagerEditRequest{Id: int64(id),Username: username,Password: password,Email: email,Mobile: mobile,RoleId: int64(roleId),})if !editResult.Success {con.Error(c, 修改数据失败, /admin/manager/edit?idmodels.String(id))return}con.Success(c, 修改数据成功, /admin/manager) }//删除 func (con ManagerController) Delete(c *gin.Context) {//获取提交的表单数据id, err : models.Int(c.Query(id))if err ! nil {con.Error(c, 传入数据错误, /admin/manager)return}//查询管理员是否存在//获取管理员managerClient : pbManager.NewRbacManagerService(rbac, models.RbacClient)resManager, _ : managerClient.ManagerGet(context.Background(), pbManager.ManagerGetRequest{Id: int64(id),})if len(resManager.ManagerList) 0 {con.Error(c, 管理员# models.String(id) 不存在, /admin/manager)return}//调用管理员删除方法进行删除managerDeleteClient : pbManager.NewRbacManagerService(rbac, models.RbacClient)managerRes, _ : managerDeleteClient.ManagerDelete(context.Background(), pbManager.ManagerDeleteRequest{Id: int64(id),})if managerRes.Success {con.Success(c, 删除数据成功, /admin/manager)return}con.Success(c, 删除数据失败, /admin/manager) }三.校验权限管理Rbac管理员增删改查微服务功能 1.先启动服务端 见[golang gin框架] 40.Gin商城项目-微服务实战之Captcha验证码微服务代码, 这里还要启动验证码captcha微服务服务端代码以及权限管理Rbac微服务(用户登录微服务服务端,角色管理微服务服务端,管理员管理微服务服务端)服务端才行 2.启动客户端 在项目根目录下运行 :go run main.go,启动项目 3.校验权限管理Rbac管理员增删改查微服务操作是否成功  访问后台登录页面,输入用户名,密码,验证码,登录到后台后,进入管理员管理页面,对管理员进行增删改查 好了,权限管理Rbac管理员增删改查微服务功能客户端操作完成,这里微服务操作的服务端,客户端功能大致[golang gin框架] 42.Gin商城项目-微服务实战之后台Rbac微服务角色增删改查微服务类似,可参考该文章操作,下面一节继续讲解权限管理Rbac微服务之权限的增删改查 [上一节][golang gin框架] 42.Gin商城项目-微服务实战之后台Rbac微服务角色增删改查微服务 [下一节][golang gin框架] 44.Gin商城项目-微服务实战之后台Rbac微服务之权限的增删改查微服务
http://www.w-s-a.com/news/997515/

相关文章:

  • 重庆建网站的公司集中在哪里中煤第五建设有限公司网站
  • 成都网站建设987net运维需要掌握哪些知识
  • 网站建设师个人简介怎么写WordPress头像美化插件
  • 网站优化知识销售管理系统c语言
  • 桂林市网站设计厦门自己建网站
  • 网站seo哪里做的好东莞做网站优化的公司
  • 休闲采摘园网站建设政务公开和网站建设工作的建议
  • 长沙网站建设哪个公司好PHP amp MySQL网站建设宝典
  • 代码编辑器做热点什么网站好湛江网站建设哪家好
  • php网站开发概念网站开发岗位职责任职责格
  • asp 网站源码 下载西安自适应网站建设
  • 白领兼职做网站贵阳网站设计哪家好
  • 热水器网站建设 中企动力企业网站开发需要多钱
  • 北京市建设工程信息网交易网站静态网页模板免费下载网站
  • 福田欧曼服务站网站前台设计
  • 网站做系统叫什么软件吗注册域名需要实名认证吗
  • jsp网站开发教学视频ui设计风格
  • 注册网站建设开发怎么自己做导航网站
  • 设计做网站品牌咖啡主题网页界面设计
  • 个人网站制作总体设计宿迁房价2023年最新房价
  • 服装网站建设进度及实施过程马鞍山网站设计制作
  • 郑州网站优化顾问济宁网站制作
  • 网站开发简单吗网站引导页分为三个板块设计风格
  • 湖南做网站 在线磐石网络百度一下百度搜索
  • 现在建网站多少钱推广营销费
  • 联想企业网站建设的思路西安网站建设阳建
  • 网站内容 内链网站建设电话销售工作总结
  • 系统网站开发知名的摄影网站有哪些
  • 网站拍照的幕布扬中网站建设价位
  • 网站ie兼容性差西安小程序开发的公司