首页 > 其他分享 >Beego仿小米商城RBAC管理模块

Beego仿小米商城RBAC管理模块

时间:2024-06-13 22:13:12浏览次数:12  
标签:access Beego models RBAC manager role Error 小米 id

Beego仿小米商城RBAC管理模块

原创 Go大神 Go大神 2024-05-20 20:38 浙江

一、RBAC表结构

1、表结构图

图片

2、models\manager.go

package models
import ( _ "github.com/jinzhu/gorm")
type Manager struct { Id int Username string Password string Mobile string Email string Status int RoleId int AddTime int IsSuper int Role Role `gorm:"foreignkey:Id;association_foreignkey:RoleId"`}
func (Manager) TableName() string { return "manager"}

3、models\role.go

package modelsimport (  _ "github.com/jinzhu/gorm")
type Role struct { Id int Title string Description string Status int AddTime int}
func (Role) TableName() string { return "role"}

4、models\role_access.go

package modelsimport (  _ "github.com/jinzhu/gorm")
type RoleAccess struct { AccessId int RoleId int}
func (RoleAccess) TableName() string { return "role_access"}

5、models\access.go

package modelsimport (  _ "github.com/jinzhu/gorm")
type Access struct { Id int ModuleName string //模块名称 ActionName string //操作名称 Type int //节点类型 : 1、表示模块 2、表示菜单 3、操作 Url string //路由跳转地址 ModuleId int //此module_id和当前模型的_id关联 module_id= 0 表示模块 Sort int Description string Status int AddTime int AccessItem []Access `gorm:"foreignkey:ModuleId;association_foreignkey:Id"` Checked bool `gorm:"-"` // 忽略本字段}
func (Access) TableName() string { return "access"}

二、用户管理

package adminimport (  "beegoxiaomi/models"  "fmt"  "github.com/astaxie/beego"  "strconv"  "strings")
type ManagerController struct { BaseController}
func (c *ManagerController) Get() { manager := []models.Manager{} models.DB.Preload("Role").Find(&manager) c.Data["managerList"] = manager fmt.Println(manager) c.TplName = "admin/manager/index.html"}
func (c *ManagerController) Add() { //获取所有的角色 role := []models.Role{} models.DB.Find(&role) c.Data["roleList"] = role c.TplName = "admin/manager/add.html"}
func (c *ManagerController) DoAdd() { //获取数据 roleId, err1 := c.GetInt("role_id") if err1 != nil { c.Error("非法请求", "/manager/add") return } username := strings.Trim(c.GetString("username"), " ") password := strings.Trim(c.GetString("password"), " ") mobile := strings.Trim(c.GetString("mobile"), " ") email := strings.Trim(c.GetString("email"), " ")
if len(username) < 2 || len(password) < 6 { c.Error("用户名或者密码长度不合法", "/manager/add") return } //判断数据库里面有没有当前用户 managerList := []models.Manager{} models.DB.Where("username=?", username).Find(&managerList) if len(managerList) > 0 { c.Error("用户名已经存在", "/manager/add") return } //增加管理员 manager := models.Manager{} manager.Username = username manager.Password = models.Md5(password) manager.Mobile = mobile manager.Email = email manager.Status = 1 manager.AddTime = int(models.GetUnix()) manager.RoleId = roleId err := models.DB.Create(&manager).Error if err != nil { c.Error("增加管理员失败", "/manager/add") return } c.Success("增加管理员成功", "/manager")}
func (c *ManagerController) Edit() {
//获取管理员信息 id, err := c.GetInt("id") if err != nil { c.Error("非法请求", "/manager") return } manager := models.Manager{Id: id} models.DB.Find(&manager) c.Data["manager"] = manager
//获取所有的角色 role := []models.Role{} models.DB.Find(&role) c.Data["roleList"] = role c.TplName = "admin/manager/edit.html"}
func (c *ManagerController) DoEdit() {
id, err1 := c.GetInt("id") if err1 != nil { c.Error("非法请求", "/manager") return } roleId, err2 := c.GetInt("role_id") if err2 != nil { c.Error("非法请求", "/manager") return } mobile := strings.Trim(c.GetString("mobile"), " ") email := strings.Trim(c.GetString("email"), " ") password := strings.Trim(c.GetString("password"), " ")
//获取数据 manager := models.Manager{Id: id} models.DB.Find(&manager) manager.RoleId = roleId manager.Mobile = mobile manager.Email = email if password != "" { if len(password) < 6 { c.Error("密码长度不合法,密码长度不能小于6位", "/manager/edit?id="+strconv.Itoa(id)) return } manager.Password = models.Md5(password) } //执行修改 err := models.DB.Save(&manager).Error if err != nil { beego.Info(err) c.Error("修改数据失败-检查一下数据是否合法", "/manager/edit?id="+strconv.Itoa(id)) } else { c.Success("修改数据成功", "/manager") }}func (c *ManagerController) Delete() { id, err1 := c.GetInt("id") if err1 != nil { c.Error("传入参数错误", "/manager") return } manager := models.Manager{Id: id} models.DB.Delete(&manager) c.Success("删除轮播图成功", "/manager")}

三、角色管理

package adminimport (  "beegoxiaomi/models"  "strconv"  "strings")
type RoleController struct { BaseController}
func (c *RoleController) Get() {
role := []models.Role{} models.DB.Find(&role) c.Data["roleList"] = role c.TplName = "admin/role/index.html"}
func (c *RoleController) Add() { c.TplName = "admin/role/add.html"}
func (c *RoleController) DoAdd() { title := strings.Trim(c.GetString("title"), " ") description := strings.Trim(c.GetString("description"), " ")
if title == "" { c.Error("标题不能为空", "/role/add") return } role := models.Role{} role.Title = title role.Description = description role.Status = 1 role.AddTime = int(models.GetUnix()) err := models.DB.Create(&role).Error if err != nil { c.Error("增加角色", "/role/add") } else { c.Success("增加角色成功", "/role") }}
func (c *RoleController) Edit() { id, err := c.GetInt("id") if err != nil { c.Error("传入参数错误", "/role") return }
role := models.Role{Id: id} models.DB.Find(&role) c.Data["role"] = role c.TplName = "admin/role/edit.html"}
func (c *RoleController) DoEdit() {
id, err1 := c.GetInt("id") if err1 != nil { c.Error("传入参数错误", "/role") return } title := strings.Trim(c.GetString("title"), " ") description := strings.Trim(c.GetString("description"), " ") if title == "" { c.Error("标题不能为空", "/role/add") return } //修改 role := models.Role{Id: id} models.DB.Find(&role) role.Title = title role.Description = description err2 := models.DB.Save(&role).Error if err2 != nil { c.Error("修改数据失败", "/role/edit?id="+strconv.Itoa(id)) } else { c.Success("修改角色成功", "/role") }
}
func (c *RoleController) Delete() { id, err1 := c.GetInt("id") if err1 != nil { c.Error("传入参数错误", "/role") return } role := models.Role{Id: id} models.DB.Delete(&role) c.Success("删除角色成功", "/role")
}
func (c *RoleController) Auth() {
//1、获取角色id
roleId, err := c.GetInt("id") if err != nil { c.Error("传入参数错误", "/role") return }
//2、获取全部的权限
access := []models.Access{} models.DB.Preload("AccessItem").Where("module_id=0").Find(&access)
//3、获取当前角色拥有的权限 ,并把权限id放在一个map对象里面 roleAccess := []models.RoleAccess{} models.DB.Where("role_id=?", roleId).Find(&roleAccess) roleAccessMap := make(map[int]int) for _, v := range roleAccess { roleAccessMap[v.AccessId] = v.AccessId }
//4、循环遍历所有的权限数据,判断当前权限的id是否在角色权限的Map对象中,如果是的话给当前数据加入checked属性 for i := 0; i < len(access); i++ { if _, ok := roleAccessMap[access[i].Id]; ok { access[i].Checked = true } for j := 0; j < len(access[i].AccessItem); j++ { if _, ok := roleAccessMap[access[i].AccessItem[j].Id]; ok { access[i].AccessItem[j].Checked = true } } } //5、渲染权限数据以及角色 Id c.Data["accessList"] = access c.Data["roleId"] = roleId c.TplName = "admin/role/auth.html"
}
func (c *RoleController) DoAuth() { //1、获取参数post传过来的角色id 和 权限切片 roleId, err := c.GetInt("role_id") if err != nil { c.Error("传入参数错误", "/role") return } accessNode := c.GetStrings("access_node")
//2、修改角色权限---删除当前角色下面的所有权限
roleAccess := models.RoleAccess{} models.DB.Where("role_id=?", roleId).Delete(&roleAccess)
//3、执行增加数据
for _, v := range accessNode { accessId, _ := strconv.Atoi(v) roleAccess.AccessId = accessId roleAccess.RoleId = roleId models.DB.Create(&roleAccess) } c.Success("授权成功", "/role/auth?id="+strconv.Itoa(roleId))}

四、权限管理

package admin
import ( "beegoxiaomi/models" "strconv")
type AccessController struct { BaseController}
func (c *AccessController) Get() { access := []models.Access{} models.DB.Preload("AccessItem").Where("module_id=0").Find(&access) c.Data["accessList"] = access c.TplName = "admin/access/index.html"}
func (c *AccessController) Add() { //加载顶级模块 access := []models.Access{} models.DB.Where("module_id=0").Find(&access) c.Data["accessList"] = access c.TplName = "admin/access/add.html"}
func (c *AccessController) DoAdd() {
moduleName := c.GetString("module_name") iType, err1 := c.GetInt("type") actionName := c.GetString("action_name") url := c.GetString("url") moduleId, err2 := c.GetInt("module_id") sort, err3 := c.GetInt("sort") description := c.GetString("description") status, err4 := c.GetInt("status") if err1 != nil || err2 != nil || err3 != nil || err4 != nil { c.Error("传入参数错误", "/access/add") return } access := models.Access{ ModuleName: moduleName, Type: iType, ActionName: actionName, Url: url, ModuleId: moduleId, Sort: sort, Description: description, Status: status, } err := models.DB.Create(&access).Error if err != nil { c.Error("增加数据失败", "/access/add") } else { c.Success("增加数据成功", "/access") }
}
func (c *AccessController) Edit() { //获取要修改的数据 id, err1 := c.GetInt("id") if err1 != nil { c.Error("传入参数错误", "/access") return } access := models.Access{Id: id} models.DB.Find(&access) c.Data["access"] = access
//获取顶级模块 accessList := []models.Access{} models.DB.Where("module_id=0").Find(&accessList) c.Data["accessList"] = accessList
c.TplName = "admin/access/edit.html"}
func (c *AccessController) DoEdit() { id, err1 := c.GetInt("id") moduleName := c.GetString("module_name") iType, err2 := c.GetInt("type") actionName := c.GetString("action_name") url := c.GetString("url") moduleId, err3 := c.GetInt("module_id") sort, err4 := c.GetInt("sort") description := c.GetString("description") status, err5 := c.GetInt("status") if err1 != nil || err2 != nil || err3 != nil || err4 != nil || err5 != nil { c.Error("传入参数错误", "/access") return } access := models.Access{Id: id} models.DB.Find(&access) access.ModuleName = moduleName access.Type = iType access.ActionName = actionName access.Url = url access.ModuleId = moduleId access.Sort = sort access.Description = description access.Status = status err := models.DB.Save(&access).Error if err != nil { c.Error("修改失败", "/access/edit?id="+strconv.Itoa(id)) return } c.Success("修改成功", "/access/")
}
func (c *AccessController) Delete() {
id, err1 := c.GetInt("id") if err1 != nil { c.Error("传入参数错误", "/access") return } //获取当前数据 access1 := models.Access{Id: id} models.DB.Find(&access1) if access1.ModuleId == 0 { //顶级模块 access3 := []models.Access{} models.DB.Where("module_id=?", access1.Id).Find(&access3) if len(access3) > 0 { c.Error("当前模块下面还有菜单或者操作,无法删除", "/access") return } } access2 := models.Access{Id: id} models.DB.Delete(&access2) c.Success("删除成功", "/access")
}
Go大神

 谢谢!我很高兴能帮到您! 

赞赏二维码喜欢作者

GoLang系列103 GoLang系列 · 目录 上一篇Beego仿小米商城RBAC判断权限下一篇Go语言Gin框架路由详解:从入门到精通 阅读 133 Go大神   ​   写下你的留言           复制搜一搜分享收藏划线    

人划线

 

标签:access,Beego,models,RBAC,manager,role,Error,小米,id
From: https://www.cnblogs.com/cheyunhua/p/18246859

相关文章

  • 小米充电头总结
    小米充电头总结小米67w版本1,65w充电头(满血):型号MDY-11-EB2,67w秒充版(满血):型号MDY-12-ES3,67w轻享版(残血):型号MDY-12-EF4,67w(残血):型号MDY-14-EV5,67w(残血):型号MDY-15-EQ6,67w1a1c(满血):型号MDY-14-EU7,67w小布丁版(残血):型号MDY-16-EJ,支持UFCS融合快充,但是很垃圾。8,67w小布丁大字......
  • 基于ESP32+arduino+platformIO驱动小米模组接入米家app(以温湿度传感器为例)
    1.选择开发板以及开发环境1.ESP32-C3-DevKitC-02作为主控(以下称为ESP32模块)相关文档:ESP32-C3-DevKitC-02-ESP32-C3-—ESP-IDF编程指南latest文档https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32c3/hw-reference/esp32c3/user-guide-devkitc-02.ht......
  • 小米开放式耳机怎么样?倍思、西圣、小米开放式耳机测评比较!
    作为一名热衷于分享真实体验的博主,我在过去两年开始接触开放式耳机,并因此受到许多朋友的咨询,询问哪款开放式耳机更加出色。为了找出最佳的开放式耳机,我进行了深入的调查和实地测试。我发现高价并不总是代表高质量,而低价也不一定意味着低质量。因此,我投入了大量资金购买了十几款......
  • Sz-Admin | SpringBoot3 JDK21 Vue3开源后台RBAC管理系统 | 2024年好用的开源RBAC管理
    简介接触了很多优秀的开源和闭源项目,在使用过程中也发现一些问题,不甘满足的我遂产生了想法:于是利用休息时间编写了一套后台管理系统,它灵活、简洁、高效,拥抱最新的技术,因此Sz-Admin便诞生了,也意为升职Admin,升职加薪节节高。SzAdmin,一个基于SpringBoot3、Vue3和El......
  • 小米SU7智能座舱介绍,果然有亮点!
    2024年,小米SU7横空出世,从开始的怀疑到发布后仅24h就达到了8W台的订单量,火到出圈的具象化。智能手机厂家造车,之前的华为做了榜样,小米作为汽车制造中又一条鲶鱼,能否给智能汽车市场带来新的契机?小米造车可谓是各方位进行全新打造,包括座舱、底盘、智驾、车身、动力各大系......
  • 小米10ultra(IMX350 2000W) 小米11ultra(IMX586 4800W) 超广角放大对比 ISO12233
    拍摄距离ISO12233的打印纸大概半米,室内灯光环境结论:差距比较小,不过也是能看出来的。大概差半级到一级。10u能分辨到4,11u能分辨到4.5。小米10ultra质量:高HEICIMG_20240605_205122.HEIC1.29MB3880x5184 像素  小米11ultra质量:高没用HEIC用的jpgIMG_20240605_2......
  • 小米商城格式化、反混淆检测点
    小米商城格式化检测点:vara=function(){  varx=!0;  returnfunction(a,t){   vare=x?function(){    if(t){     varx=t.apply(a,arguments);     t=null;     returnx;   }  }:......
  • beego-yaml-viper 配置数据库连接
    定义config.yaml文件 mysql:driver:mysqluser:rootpassword:roothost:127.0.0.1port:8889database:2204aredis:addr:"127.0.0.1:6379"password:""db:0在main.go文件中packagemainimport( "github.com/b......
  • 小米便签新增功能-更改背景
    先展示效果        上传n张图片到对应目录,然后可以在菜单中选择并替换Step1.上传图片png到一下路径中,注意名字最好小写英文:D:\andriodstudio\code\        Notesmaster23\app\src\main\res\drawable-hdpi2.加入string(类似c++的define)注意:这里的fly、f......
  • 小米投屏怎么投?收好这3个投屏指南!(2024新)
    近年来,小米凭借过硬的品质和合理的价格成为手机市场的一股强劲力量。随着其销量的上升,人们可以通过多种方式使用它来获得乐趣和便利。比如小米MIUI11自带一个“光环”——Miracast,可以让用户在电脑上控制小米/红米/小米,获得更好的用户体验。而对于大多数使用其他版本操作系......