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 }