权限功能封装

dev
truthhun 2 years ago
parent f44c914d4e
commit c8469d20c5

@ -2,10 +2,12 @@ package model
import (
"fmt"
"moredoc/util/captcha"
"strconv"
"strings"
"time"
"github.com/gofrs/uuid"
jsoniter "github.com/json-iterator/go"
"go.uber.org/zap"
"gorm.io/gorm"
@ -409,3 +411,59 @@ func (m *DBModel) GetConfigOfSecurity(name ...string) (config ConfigSecurity) {
return
}
func (m *DBModel) initConfig() (err error) {
// 初始化配置项
cfgs := []Config{
// 系统配置项
{Category: ConfigCategorySystem, Name: ConfigSystemTitle, Label: "网站名称", Value: "MOREDOC · 魔刀文库", Placeholder: "请输入您网站的名称", InputType: "text", Sort: 1, Options: ""},
{Category: ConfigCategorySystem, Name: ConfigSystemDescription, Label: "网站描述", Value: "MOREDOC · 魔刀文库", Placeholder: "请输入您网站的描述", InputType: "text", Sort: 2, Options: ""},
{Category: ConfigCategorySystem, Name: ConfigSystemKeywords, Label: "网站关键字", Value: "MOREDOC · 魔刀文库", Placeholder: "请输入您网站的关键字", InputType: "text", Sort: 3, Options: ""},
{Category: ConfigCategorySystem, Name: ConfigSystemLogo, Label: "网站Logo", Value: "", Placeholder: "请输入您网站的Logo", InputType: "text", Sort: 4, Options: ""},
{Category: ConfigCategorySystem, Name: ConfigSystemFavicon, Label: "网站Favicon", Value: "", Placeholder: "请输入您网站的Favicon", InputType: "text", Sort: 5, Options: ""},
{Category: ConfigCategorySystem, Name: ConfigSystemIcp, Label: "网站备案号", Value: "", Placeholder: "请输入您网站的备案号", InputType: "text", Sort: 6, Options: ""},
{Category: ConfigCategorySystem, Name: ConfigSystemDomain, Label: "网站域名", Value: "", Placeholder: "请输入您网站的域名", InputType: "textarea", Sort: 7, Options: ""},
{Category: ConfigCategorySystem, Name: ConfigSystemAnalytics, Label: "网站统计代码", Value: "", Placeholder: "请输入您网站的统计代码", InputType: "text", Sort: 8, Options: ""},
{Category: ConfigCategorySystem, Name: ConfigSystemTheme, Label: "网站主题", Value: "default", Placeholder: "请输入您网站的主题", InputType: "text", Sort: 9, Options: ""},
{Category: ConfigCategorySystem, Name: ConfigSystemCopyright, Label: "网站版权信息", Value: "", Placeholder: "请输入您网站的版权信息", InputType: "text", Sort: 10, Options: ""},
// JWT 配置项
{Category: ConfigCategoryJWT, Name: ConfigJWTDuration, Label: "Token有效期", Value: "365", Placeholder: "用户Token签名有效期单位为天默认365天", InputType: "number", Sort: 11, Options: ""},
{Category: ConfigCategoryJWT, Name: ConfigJWTSecret, Label: "Token密钥", Value: uuid.Must(uuid.NewV4()).String(), Placeholder: "用户Token签名密钥修改之后之前所有的token签名都将失效请慎重修改", InputType: "text", Sort: 12, Options: ""},
// 验证码配置项
{Category: ConfigCategoryCaptcha, Name: ConfigCaptchaHeight, Label: "验证码高度", Value: "60", Placeholder: "请输入验证码高度默认为60", InputType: "number", Sort: 13, Options: ""},
{Category: ConfigCategoryCaptcha, Name: ConfigCaptchaWidth, Label: "验证码宽度", Value: "240", Placeholder: "请输入验证码宽度默认为240", InputType: "number", Sort: 14, Options: ""},
{Category: ConfigCategoryCaptcha, Name: ConfigCaptchaLength, Label: "验证码长度", Value: "5", Placeholder: "请输入验证码长度默认为6", InputType: "number", Sort: 15, Options: ""},
{Category: ConfigCategoryCaptcha, Name: ConfigCaptchaType, Label: "验证码类型", Value: "digit", Placeholder: "请选择验证码类型,默认为数字", InputType: "select", Sort: 16, Options: captcha.CaptchaTypeOptions},
// 安全配置项
{Category: ConfigCategorySecurity, Name: ConfigSecurityIsClose, Label: "是否关闭网站", Value: "false", Placeholder: "请选择是否关闭网站", InputType: "swith", Sort: 17, Options: ""},
{Category: ConfigCategorySecurity, Name: ConfigSecurityEnableRegister, Label: "是否允许注册", Value: "true", Placeholder: "请选择是否允许用户注册", InputType: "swith", Sort: 18, Options: ""},
{Category: ConfigCategorySecurity, Name: ConfigSecurityEnableCaptchaLogin, Label: "是否开启登录验证码", Value: "true", Placeholder: "请选择是否开启登录验证码", InputType: "swith", Sort: 19, Options: ""},
{Category: ConfigCategorySecurity, Name: ConfigSecurityEnableCaptchaRegister, Label: "是否开启注册验证码", Value: "true", Placeholder: "请选择是否开启注册验证码", InputType: "swith", Sort: 20, Options: ""},
{Category: ConfigCategorySecurity, Name: ConfigSecurityEnableCaptchaComment, Label: "是否开启评论验证码", Value: "true", Placeholder: "请选择是否开启评论验证码", InputType: "swith", Sort: 21, Options: ""},
{Category: ConfigCategorySecurity, Name: ConfigSecurityEnableCaptchaFindPassword, Label: "是否开启找回密码验证码", Value: "true", Placeholder: "请选择是否开启找回密码验证码", InputType: "swith", Sort: 22, Options: ""},
{Category: ConfigCategorySecurity, Name: ConfigSecurityEnableCaptchaUpload, Label: "是否开启文档上传验证码", Value: "true", Placeholder: "请选择是否开启文档上传验证码", InputType: "swith", Sort: 23, Options: ""},
}
for _, cfg := range cfgs {
existConfig, _ := m.GetConfigByNameCategory(cfg.Name, cfg.Category, "id")
if existConfig.Id > 0 {
// 更新除了值之外的所有字段
cfg.Id = existConfig.Id
err = m.db.Omit("value").Updates(&cfg).Error
if err != nil {
m.logger.Error("initConfig", zap.Error(err))
return
}
continue
}
err = m.CreateConfig(&cfg)
if err != nil {
m.logger.Error("initConfig", zap.Error(err))
return
}
}
return
}

@ -11,13 +11,14 @@ import (
type Group struct {
Id int64 `form:"id" json:"id,omitempty" gorm:"primaryKey;autoIncrement;column:id;comment:用户组 id;"`
Title string `form:"title" json:"title,omitempty" gorm:"column:title;type:varchar(64);size:64;comment:用户组名称;"`
Title string `form:"title" json:"title,omitempty" gorm:"column:title;type:varchar(64);size:64;index:title,unique;comment:用户组名称;"`
Color string `form:"color" json:"color,omitempty" gorm:"column:color;type:varchar(20);size:20;comment:颜色;"`
Icon string `form:"icon" json:"icon,omitempty" gorm:"column:icon;type:varchar(255);size:255;comment:icon;"`
IsDefault int8 `form:"is_default" json:"is_default,omitempty" gorm:"column:is_default;type:tinyint(3) unsigned;default:0;comment:是否默认;"`
IsDisplay int8 `form:"is_display" json:"is_display,omitempty" gorm:"column:is_display;type:tinyint(3) unsigned;default:0;comment:是否显示在用户名后;"`
Description string `form:"description" json:"description,omitempty" gorm:"column:description;type:varchar(255);size:255;comment:用户组描述;"`
UserCount int `form:"user_count" json:"user_count,omitempty" gorm:"column:user_count;type:int(11);size:11;default:0;comment:用户数量;"`
Sort int `form:"sort" json:"sort,omitempty" gorm:"column:sort;type:int(11);size:11;default:0;comment:排序,值越大越靠前;"`
CreatedAt time.Time `form:"created_at" json:"created_at,omitempty" gorm:"column:created_at;type:datetime;comment:创建时间;"`
UpdatedAt time.Time `form:"updated_at" json:"updated_at,omitempty" gorm:"column:updated_at;type:datetime;comment:更新时间;"`
}
@ -32,6 +33,7 @@ type Group struct {
// int32 is_display = 6;
// string description = 7;
// int32 user_count = 8;
// int32 sort = 9;
// = 0;
// = 0;
//}
@ -80,6 +82,11 @@ func (m *DBModel) GetGroup(id interface{}, fields ...string) (group Group, err e
return
}
func (m *DBModel) GetGroupByTitle(title string) (group Group, err error) {
err = m.db.Where("title = ?", title).First(&group).Error
return
}
type OptionGetGroupList struct {
Page int
Size int

@ -190,3 +190,39 @@ func (m *DBModel) DeleteGroupPermission(ids []interface{}) (err error) {
}
return
}
// CheckPermissionByUserId 根据用户ID检查用户是否有权限
func (m *DBModel) CheckPermissionByUserId(permissionIdentifier string, userId int64) (yes bool) {
var (
userGroups []UserGroup
groupId []int64
)
m.db.Where("user_id = ?", userId).Find(&userGroups)
for _, ug := range userGroups {
groupId = append(groupId, ug.GroupId)
}
return m.CheckPermissionByGroupId(permissionIdentifier, groupId)
}
// CheckPermissionByGroupId 根据用户所属用户组ID检查用户是否有权限
func (m *DBModel) CheckPermissionByGroupId(permissionIdentifier string, groupId []int64) (yes bool) {
if len(groupId) == 0 {
return
}
permission, _ := m.GetPermissionByIdentifier(permissionIdentifier, "id")
if permission.Id == 0 {
return
}
var groupPermission GroupPermission
err := m.db.Where("group_id in (?) and permission_id = ?", groupId, permission.Id).First(&groupPermission).Error
if err != nil {
m.logger.Error("CheckPermissionByGroupId", zap.Error(err))
}
// 如果有权限返回true
return groupPermission.Id > 0
}

@ -4,10 +4,8 @@ import (
"database/sql"
"errors"
"moredoc/conf"
"moredoc/util/captcha"
"strings"
"github.com/gofrs/uuid"
"go.uber.org/zap"
"gorm.io/driver/mysql"
"gorm.io/gorm"
@ -189,90 +187,50 @@ func (m *DBModel) showTableColumn(tableName string) (columns []TableColumn, err
// initialDatabase 初始化数据库相关数据
func (m *DBModel) initDatabase() (err error) {
// 1. 初始化用户
if err = m.initUser(); err != nil {
if err = m.initPermission(); err != nil {
m.logger.Error("initialDatabase", zap.Error(err))
return
}
// 2. 初始化配置
if err = m.initConfig(); err != nil {
// 初始化用户组及其权限
if err = m.initGroupAndPermission(); err != nil {
m.logger.Error("initialDatabase", zap.Error(err))
return
}
return
}
func (m *DBModel) initUser() (err error) {
// 如果不存在任意用户,则初始化一个用户作为管理员
var existUser User
m.db.Select("id").First(&existUser)
if existUser.Id > 0 {
// 初始化用户
if err = m.initUser(); err != nil {
m.logger.Error("initialDatabase", zap.Error(err))
return
}
// 初始化一个用户
user := &User{Username: "admin", Password: "123456"}
groupId := 1 // ID==1的用户组为管理员组
err = m.CreateUser(user, int64(groupId))
if err != nil {
m.logger.Error("initUser", zap.Error(err))
// 初始化配置
if err = m.initConfig(); err != nil {
m.logger.Error("initialDatabase", zap.Error(err))
return
}
return
}
func (m *DBModel) initConfig() (err error) {
// 初始化配置项
cfgs := []Config{
// 系统配置项
{Category: ConfigCategorySystem, Name: ConfigSystemTitle, Label: "网站名称", Value: "MOREDOC · 魔刀文库", Placeholder: "请输入您网站的名称", InputType: "text", Sort: 1, Options: ""},
{Category: ConfigCategorySystem, Name: ConfigSystemDescription, Label: "网站描述", Value: "MOREDOC · 魔刀文库", Placeholder: "请输入您网站的描述", InputType: "text", Sort: 2, Options: ""},
{Category: ConfigCategorySystem, Name: ConfigSystemKeywords, Label: "网站关键字", Value: "MOREDOC · 魔刀文库", Placeholder: "请输入您网站的关键字", InputType: "text", Sort: 3, Options: ""},
{Category: ConfigCategorySystem, Name: ConfigSystemLogo, Label: "网站Logo", Value: "", Placeholder: "请输入您网站的Logo", InputType: "text", Sort: 4, Options: ""},
{Category: ConfigCategorySystem, Name: ConfigSystemFavicon, Label: "网站Favicon", Value: "", Placeholder: "请输入您网站的Favicon", InputType: "text", Sort: 5, Options: ""},
{Category: ConfigCategorySystem, Name: ConfigSystemIcp, Label: "网站备案号", Value: "", Placeholder: "请输入您网站的备案号", InputType: "text", Sort: 6, Options: ""},
{Category: ConfigCategorySystem, Name: ConfigSystemDomain, Label: "网站域名", Value: "", Placeholder: "请输入您网站的域名", InputType: "textarea", Sort: 7, Options: ""},
{Category: ConfigCategorySystem, Name: ConfigSystemAnalytics, Label: "网站统计代码", Value: "", Placeholder: "请输入您网站的统计代码", InputType: "text", Sort: 8, Options: ""},
{Category: ConfigCategorySystem, Name: ConfigSystemTheme, Label: "网站主题", Value: "default", Placeholder: "请输入您网站的主题", InputType: "text", Sort: 9, Options: ""},
{Category: ConfigCategorySystem, Name: ConfigSystemCopyright, Label: "网站版权信息", Value: "", Placeholder: "请输入您网站的版权信息", InputType: "text", Sort: 10, Options: ""},
// JWT 配置项
{Category: ConfigCategoryJWT, Name: ConfigJWTDuration, Label: "Token有效期", Value: "365", Placeholder: "用户Token签名有效期单位为天默认365天", InputType: "number", Sort: 11, Options: ""},
{Category: ConfigCategoryJWT, Name: ConfigJWTSecret, Label: "Token密钥", Value: uuid.Must(uuid.NewV4()).String(), Placeholder: "用户Token签名密钥修改之后之前所有的token签名都将失效请慎重修改", InputType: "text", Sort: 12, Options: ""},
// 验证码配置项
{Category: ConfigCategoryCaptcha, Name: ConfigCaptchaHeight, Label: "验证码高度", Value: "60", Placeholder: "请输入验证码高度默认为60", InputType: "number", Sort: 13, Options: ""},
{Category: ConfigCategoryCaptcha, Name: ConfigCaptchaWidth, Label: "验证码宽度", Value: "240", Placeholder: "请输入验证码宽度默认为240", InputType: "number", Sort: 14, Options: ""},
{Category: ConfigCategoryCaptcha, Name: ConfigCaptchaLength, Label: "验证码长度", Value: "5", Placeholder: "请输入验证码长度默认为6", InputType: "number", Sort: 15, Options: ""},
{Category: ConfigCategoryCaptcha, Name: ConfigCaptchaType, Label: "验证码类型", Value: "digit", Placeholder: "请选择验证码类型,默认为数字", InputType: "select", Sort: 16, Options: captcha.CaptchaTypeOptions},
// 安全配置项
{Category: ConfigCategorySecurity, Name: ConfigSecurityIsClose, Label: "是否关闭网站", Value: "false", Placeholder: "请选择是否关闭网站", InputType: "swith", Sort: 17, Options: ""},
{Category: ConfigCategorySecurity, Name: ConfigSecurityEnableRegister, Label: "是否允许注册", Value: "true", Placeholder: "请选择是否允许用户注册", InputType: "swith", Sort: 18, Options: ""},
{Category: ConfigCategorySecurity, Name: ConfigSecurityEnableCaptchaLogin, Label: "是否开启登录验证码", Value: "true", Placeholder: "请选择是否开启登录验证码", InputType: "swith", Sort: 19, Options: ""},
{Category: ConfigCategorySecurity, Name: ConfigSecurityEnableCaptchaRegister, Label: "是否开启注册验证码", Value: "true", Placeholder: "请选择是否开启注册验证码", InputType: "swith", Sort: 20, Options: ""},
{Category: ConfigCategorySecurity, Name: ConfigSecurityEnableCaptchaComment, Label: "是否开启评论验证码", Value: "true", Placeholder: "请选择是否开启评论验证码", InputType: "swith", Sort: 21, Options: ""},
{Category: ConfigCategorySecurity, Name: ConfigSecurityEnableCaptchaFindPassword, Label: "是否开启找回密码验证码", Value: "true", Placeholder: "请选择是否开启找回密码验证码", InputType: "swith", Sort: 22, Options: ""},
{Category: ConfigCategorySecurity, Name: ConfigSecurityEnableCaptchaUpload, Label: "是否开启文档上传验证码", Value: "true", Placeholder: "请选择是否开启文档上传验证码", InputType: "swith", Sort: 23, Options: ""},
// 初始化用户组
func (m *DBModel) initGroupAndPermission() (err error) {
groups := []Group{
{Id: 1, Title: "超级管理员", IsDisplay: 1, Description: "系统超级管理员", UserCount: 0, Sort: 0},
{Id: 2, Title: "普通用户", IsDisplay: 1, Description: "普通用户", UserCount: 0, Sort: 0, IsDefault: 1},
{Id: 3, Title: "游客", IsDisplay: 1, Description: "游客", UserCount: 0, Sort: 0},
}
for _, cfg := range cfgs {
existConfig, _ := m.GetConfigByNameCategory(cfg.Name, cfg.Category, "id")
if existConfig.Id > 0 {
// 更新除了值之外的所有字段
cfg.Id = existConfig.Id
err = m.db.Omit("value").Updates(&cfg).Error
if err != nil {
m.logger.Error("initConfig", zap.Error(err))
return
}
continue
}
err = m.CreateConfig(&cfg)
if err != nil {
m.logger.Error("initConfig", zap.Error(err))
return
}
// 如果没有任何用户组,则初始化
var existGroup Group
m.db.First(&existGroup)
if existGroup.Id > 0 {
return
}
err = m.db.Create(&groups).Error
if err != nil {
m.logger.Error("initGroup", zap.Error(err))
}
return
}

@ -19,6 +19,10 @@ type Permission struct {
UpdatedAt time.Time `form:"updated_at" json:"updated_at,omitempty" gorm:"column:updated_at;type:datetime;comment:更新时间;"`
}
func (Permission) TableName() string {
return tablePrefix + "permission"
}
// 这里是proto文件中的结构体可以根据需要删除或者调整
//message Permission {
// int64 id = 1;
@ -30,8 +34,157 @@ type Permission struct {
// = 0;
//}
func (Permission) TableName() string {
return tablePrefix + "permission"
// PermissionCategoryXXX 基本按照数据表来定义
const (
PermissionCategoryAttachment = "attachment" // 附件管理,包括上传等
PermissionCategoryBanner = "banner" // 管理横幅
PermissionCategoryCategory = "category" // 管理文档分类
PermissionCategoryConfig = "config" // 管理系统配置:开启验证码,是否允许上传等
PermissionCategoryDocument = "document" // 管理文档
PermissionCategoryFriendlink = "friendlink" // 管理友情链接
PermissionCategoryGroup = "group" // 管理用户组:创建、修改、删除、查看等
PermissionCategoryGroupPermission = "groupPermission" // 权限设置
PermissionCategoryUser = "user" // 管理用户:创建、修改、删除、查看、修改密码、禁用、变更分组等
)
const (
// PermissionCategoryAttachment = "attachment" // 附件管理,包括上传等
PermissionIdentifierAttachmentList = "attachmentList" // 查看附件列表
PermissionIdentifierAttachmentDelete = "attachmentDelete" // 删除单个附件
PermissionIdentifierAttachmentBatchDelete = "attachmentBatchDelete" // 批量删除附件
PermissionIdentifierAttachmentDisable = "attachmentDisable" // 禁止附件,禁止后无法访问,用于控制非法附件
// PermissionCategoryBanner = "banner" // 管理横幅
PermissionIdentifierBannerList = "bannerList" // 查看横幅列表
PermissionIdentifierBannerCreate = "bannerCreate" // 创建横幅
PermissionIdentifierBannerUpdate = "bannerUpdate" // 更新横幅
PermissionIdentifierBannerDelete = "bannerDelete" // 删除横幅
PermissionIdentifierBannerBatchDelete = "bannerBatchDelete" // 批量删除横幅
// PermissionCategoryCategory = "category" // 管理文档分类
PermissionIdentifierCategoryList = "categoryList" // 查看文档分类列表
PermissionIdentifierCategoryCreate = "categoryCreate" // 创建分类
PermissionIdentifierCategoryUpdate = "categoryUpdate" // 更新分类
PermissionIdentifierCategoryDelete = "categoryDelete" // 删除分类
PermissionIdentifierCategoryBatchDelete = "categoryBatchDelete" // 批量删除分类
// PermissionCategoryConfig = "config" // 管理系统配置:开启验证码,是否允许上传等。不允许删除配置
PermissionIdentifierConfigList = "configList" // 查看系统配置列表
PermissionIdentifierConfigUpdate = "configUpdate" // 更新系统配置
// PermissionCategoryDocument = "document" // 管理文档
PermissionIdentifierDocumentList = "documentList" // 查看文档列表
PermissionIdentifierDocumentCreate = "documentCreate" // 创建文档
PermissionIdentifierDocumentBatchCreate = "documentBatchCreate" // 批量创建文档
PermissionIdentifierDocumentUpdate = "documentUpdate" // 更新文档
PermissionIdentifierDocumentDelete = "documentDelete" // 删除文档
PermissionIdentifierDocumentBatchDelete = "documentBatchDelete" // 批量删除文档
// PermissionCategoryFriendlink = "friendlink" // 管理友情链接
PermissionIdentifierFriendlinkList = "friendlinkList" // 查看友情链接列表
PermissionIdentifierFriendlinkCreate = "friendlinkCreate" // 创建友情链接
PermissionIdentifierFriendlinkUpdate = "friendlinkUpdate" // 更新友情链接
PermissionIdentifierFriendlinkDelete = "friendlinkDelete" // 删除友情链接
PermissionIdentifierFriendlinkBatchDelete = "friendlinkBatchDelete" // 批量删除友情链接
// PermissionCategoryGroup = "group" // 管理用户组:创建、修改、删除、查看等
PermissionIdentifierGroupList = "groupList" // 查看用户组列表
PermissionIdentifierGroupCreate = "groupCreate" // 创建用户组
PermissionIdentifierGroupUpdate = "groupUpdate" // 更新用户组
PermissionIdentifierGroupDelete = "groupDelete" // 删除用户组
PermissionIdentifierGroupBatchDelete = "groupBatchDelete" // 批量删除用户组
// PermissionCategoryGroupPermission = "groupPermission" // 权限设置
PermissionIdentifierGroupPermissionList = "groupPermissionList" // 查看用户组权限列表
PermissionIdentifierGroupPermissionUpdate = "groupPermissionUpdate" // 更新用户组权限
// PermissionCategoryUser = "user" // 管理用户:创建、修改、删除、查看、修改密码、禁用、变更分组等
PermissionIdentifierUserCreate = "userCreate" // 创建用户
PermissionIdentifierUserUpdate = "userUpdate" // 修改用户
PermissionIdentifierUserDelete = "userDelete" // 删除用户
PermissionIdentifierUserBatchDelete = "userBatchDelete" // 删除用户
PermissionIdentifierUserList = "userList" // 查看用户
PermissionIdentifierUserChangePassword = "userChangePassword" // 修改用户密码
PermissionIdentifierUserDisable = "userDisable" // 禁用用户
PermissionIdentifierUserChangeGroup = "userChangeGroup" // 变更用户分组
)
func (m *DBModel) initPermission() (err error) {
permissions := []Permission{
{Id: 1, Category: PermissionCategoryAttachment, Identifier: PermissionIdentifierAttachmentList, Title: "附件管理"},
{Id: 2, Category: PermissionCategoryAttachment, Identifier: PermissionIdentifierAttachmentDelete, Title: "删除附件"},
{Id: 3, Category: PermissionCategoryAttachment, Identifier: PermissionIdentifierAttachmentBatchDelete, Title: "批量删除附件"},
{Id: 4, Category: PermissionCategoryAttachment, Identifier: PermissionIdentifierAttachmentDisable, Title: "禁用附件"},
{Id: 42, Category: PermissionCategoryAttachment, Identifier: PermissionIdentifierAttachmentDisable, Title: "禁用附件"},
{Id: 5, Category: PermissionCategoryBanner, Identifier: PermissionIdentifierBannerList, Title: "横幅管理"},
{Id: 6, Category: PermissionCategoryBanner, Identifier: PermissionIdentifierBannerCreate, Title: "创建横幅"},
{Id: 7, Category: PermissionCategoryBanner, Identifier: PermissionIdentifierBannerUpdate, Title: "更新横幅"},
{Id: 8, Category: PermissionCategoryBanner, Identifier: PermissionIdentifierBannerDelete, Title: "删除横幅"},
{Id: 9, Category: PermissionCategoryBanner, Identifier: PermissionIdentifierBannerBatchDelete, Title: "批量删除横幅"},
{Id: 10, Category: PermissionCategoryCategory, Identifier: PermissionIdentifierCategoryList, Title: "分类管理"},
{Id: 11, Category: PermissionCategoryCategory, Identifier: PermissionIdentifierCategoryCreate, Title: "创建分类"},
{Id: 12, Category: PermissionCategoryCategory, Identifier: PermissionIdentifierCategoryUpdate, Title: "更新分类"},
{Id: 13, Category: PermissionCategoryCategory, Identifier: PermissionIdentifierCategoryDelete, Title: "删除分类"},
{Id: 14, Category: PermissionCategoryCategory, Identifier: PermissionIdentifierCategoryBatchDelete, Title: "批量删除分类"},
{Id: 15, Category: PermissionCategoryConfig, Identifier: PermissionIdentifierConfigList, Title: "系统配置管理"},
{Id: 16, Category: PermissionCategoryConfig, Identifier: PermissionIdentifierConfigUpdate, Title: "更新系统配置"},
{Id: 17, Category: PermissionCategoryDocument, Identifier: PermissionIdentifierDocumentList, Title: "文档管理"},
{Id: 18, Category: PermissionCategoryDocument, Identifier: PermissionIdentifierDocumentCreate, Title: "创建文档"},
{Id: 19, Category: PermissionCategoryDocument, Identifier: PermissionIdentifierDocumentBatchCreate, Title: "批量创建文档"},
{Id: 20, Category: PermissionCategoryDocument, Identifier: PermissionIdentifierDocumentUpdate, Title: "更新文档"},
{Id: 21, Category: PermissionCategoryDocument, Identifier: PermissionIdentifierDocumentDelete, Title: "删除文档"},
{Id: 22, Category: PermissionCategoryDocument, Identifier: PermissionIdentifierDocumentBatchDelete, Title: "批量删除文档"},
{Id: 23, Category: PermissionCategoryGroup, Identifier: PermissionIdentifierGroupList, Title: "用户组管理"},
{Id: 24, Category: PermissionCategoryGroup, Identifier: PermissionIdentifierGroupCreate, Title: "创建用户组"},
{Id: 25, Category: PermissionCategoryGroup, Identifier: PermissionIdentifierGroupUpdate, Title: "更新用户组"},
{Id: 26, Category: PermissionCategoryGroup, Identifier: PermissionIdentifierGroupDelete, Title: "删除用户组"},
{Id: 27, Category: PermissionCategoryGroup, Identifier: PermissionIdentifierGroupBatchDelete, Title: "批量删除用户组"},
{Id: 28, Category: PermissionCategoryGroupPermission, Identifier: PermissionIdentifierGroupPermissionList, Title: "权限管理"},
{Id: 29, Category: PermissionCategoryGroupPermission, Identifier: PermissionIdentifierGroupPermissionUpdate, Title: "设置权限"},
{Id: 30, Category: PermissionCategoryFriendlink, Identifier: PermissionIdentifierFriendlinkList, Title: "友链管理"},
{Id: 31, Category: PermissionCategoryFriendlink, Identifier: PermissionIdentifierFriendlinkCreate, Title: "创建友链"},
{Id: 32, Category: PermissionCategoryFriendlink, Identifier: PermissionIdentifierFriendlinkUpdate, Title: "更新友链"},
{Id: 33, Category: PermissionCategoryFriendlink, Identifier: PermissionIdentifierFriendlinkDelete, Title: "删除友链"},
{Id: 34, Category: PermissionCategoryFriendlink, Identifier: PermissionIdentifierFriendlinkBatchDelete, Title: "批量删除友链"},
{Id: 35, Category: PermissionCategoryUser, Identifier: PermissionIdentifierUserCreate, Title: "创建用户"},
{Id: 36, Category: PermissionCategoryUser, Identifier: PermissionIdentifierUserUpdate, Title: "更新用户"},
{Id: 37, Category: PermissionCategoryUser, Identifier: PermissionIdentifierUserDelete, Title: "删除用户"},
{Id: 38, Category: PermissionCategoryUser, Identifier: PermissionIdentifierUserBatchDelete, Title: "批量删除用户"},
{Id: 39, Category: PermissionCategoryUser, Identifier: PermissionIdentifierUserList, Title: "用户管理"},
{Id: 40, Category: PermissionCategoryUser, Identifier: PermissionIdentifierUserChangePassword, Title: "修改用户密码"},
{Id: 41, Category: PermissionCategoryUser, Identifier: PermissionIdentifierUserChangeGroup, Title: "变更用户分组"},
}
sess := m.db.Begin()
defer func() {
if err != nil {
sess.Rollback()
} else {
sess.Commit()
}
}()
err = sess.Where("id > ?", 0).Delete(&Permission{}).Error
if err != nil {
m.logger.Error("delete permission error", zap.Error(err))
return
}
err = sess.Create(&permissions).Error
if err != nil {
m.logger.Error("create permission error", zap.Error(err))
return
}
return
}
// CreatePermission 创建Permission

@ -308,3 +308,21 @@ func (m *DBModel) CheckUserJWTToken(token string) (*UserClaims, error) {
}
return nil, err
}
func (m *DBModel) initUser() (err error) {
// 如果不存在任意用户,则初始化一个用户作为管理员
var existUser User
m.db.Select("id").First(&existUser)
if existUser.Id > 0 {
return
}
// 初始化一个用户
user := &User{Username: "admin", Password: "123456"}
groupId := 1 // ID==1的用户组为管理员组
err = m.CreateUser(user, int64(groupId))
if err != nil {
m.logger.Error("initUser", zap.Error(err))
}
return
}

Loading…
Cancel
Save