89 lines
1.7 KiB
Go
89 lines
1.7 KiB
Go
package mysql
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"gorm.io/gorm"
|
|
"myschools.me/heritage/heritage-api/model"
|
|
)
|
|
|
|
func RolePermissionsList(roleID *string) ([]string, error) {
|
|
db, err := newDB()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var codes []string
|
|
if err := db.Model(&model.Permission{}).Where("role_id = ?", *roleID).Pluck("code", &codes).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
return codes, nil
|
|
}
|
|
|
|
func RoleFirst(userID *string) (*model.User, error) {
|
|
db, err := newDB()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var u model.User
|
|
if err := db.Select("id", "role_id").Where("id = ?", *userID).First(&u).Error; err != nil {
|
|
if !errors.Is(err, gorm.ErrRecordNotFound) {
|
|
return nil, err
|
|
}
|
|
}
|
|
return &u, nil
|
|
}
|
|
|
|
func RoleHasPermission(roleID, permissionCode *string) (bool, error) {
|
|
db, err := newDB()
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
|
|
var count int64
|
|
if err := db.Model(&model.Permission{}).
|
|
Where("role_id = ? AND (code = ? OR code = ?)", *roleID, *permissionCode, "*").
|
|
Count(&count).Error; err != nil {
|
|
return false, err
|
|
}
|
|
return count > 0, nil
|
|
}
|
|
|
|
func RoleCount() (*int64, error) {
|
|
db, err := newDB()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var count int64
|
|
if err := db.Model(&model.Role{}).Count(&count).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
return &count, nil
|
|
}
|
|
|
|
func RoleCreate(obj *model.Role) (*model.Role, error) {
|
|
db, err := newDB()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if err := db.Create(obj).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
return obj, nil
|
|
}
|
|
|
|
func RoleByCode(code string) (*model.Role, bool, error) {
|
|
db, err := newDB()
|
|
if err != nil {
|
|
return nil, false, err
|
|
}
|
|
|
|
var r model.Role
|
|
if err := db.Where("code = ?", code).First(&r).Error; err != nil {
|
|
return nil, false, err
|
|
}
|
|
return &r, true, nil
|
|
}
|