sysRolePermModel.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package roleperm
  2. import (
  3. "context"
  4. "fmt"
  5. "strings"
  6. "github.com/zeromicro/go-zero/core/stores/cache"
  7. "github.com/zeromicro/go-zero/core/stores/sqlx"
  8. )
  9. var _ SysRolePermModel = (*customSysRolePermModel)(nil)
  10. type (
  11. SysRolePermModel interface {
  12. sysRolePermModel
  13. FindPermIdsByRoleId(ctx context.Context, roleId int64) ([]int64, error)
  14. FindPermIdsByRoleIds(ctx context.Context, roleIds []int64) ([]int64, error)
  15. DeleteByRoleIdTx(ctx context.Context, session sqlx.Session, roleId int64) error
  16. }
  17. customSysRolePermModel struct {
  18. *defaultSysRolePermModel
  19. }
  20. )
  21. func NewSysRolePermModel(conn sqlx.SqlConn, c cache.CacheConf, cachePrefix string, opts ...cache.Option) SysRolePermModel {
  22. return &customSysRolePermModel{
  23. defaultSysRolePermModel: newSysRolePermModel(conn, c, cachePrefix, opts...),
  24. }
  25. }
  26. func (m *customSysRolePermModel) FindPermIdsByRoleId(ctx context.Context, roleId int64) ([]int64, error) {
  27. var ids []int64
  28. query := fmt.Sprintf("SELECT `permId` FROM %s WHERE `roleId` = ?", m.table)
  29. if err := m.QueryRowsNoCacheCtx(ctx, &ids, query, roleId); err != nil {
  30. return nil, err
  31. }
  32. return ids, nil
  33. }
  34. func (m *customSysRolePermModel) FindPermIdsByRoleIds(ctx context.Context, roleIds []int64) ([]int64, error) {
  35. if len(roleIds) == 0 {
  36. return nil, nil
  37. }
  38. placeholders := make([]string, len(roleIds))
  39. args := make([]interface{}, len(roleIds))
  40. for i, id := range roleIds {
  41. placeholders[i] = "?"
  42. args[i] = id
  43. }
  44. var ids []int64
  45. query := fmt.Sprintf("SELECT DISTINCT `permId` FROM %s WHERE `roleId` IN (%s)", m.table, strings.Join(placeholders, ","))
  46. if err := m.QueryRowsNoCacheCtx(ctx, &ids, query, args...); err != nil {
  47. return nil, err
  48. }
  49. return ids, nil
  50. }
  51. func (m *customSysRolePermModel) DeleteByRoleIdTx(ctx context.Context, session sqlx.Session, roleId int64) error {
  52. query := fmt.Sprintf("DELETE FROM %s WHERE `roleId` = ?", m.table)
  53. _, err := session.ExecCtx(ctx, query, roleId)
  54. return err
  55. }