heritage-api/mysql/role-mysql.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
}