sysUserPermModel.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package userperm
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/zeromicro/go-zero/core/stores/cache"
  6. "github.com/zeromicro/go-zero/core/stores/sqlx"
  7. )
  8. var _ SysUserPermModel = (*customSysUserPermModel)(nil)
  9. type (
  10. SysUserPermModel interface {
  11. sysUserPermModel
  12. FindByUserId(ctx context.Context, userId int64) ([]*SysUserPerm, error)
  13. FindPermIdsByUserIdAndEffect(ctx context.Context, userId int64, effect string) ([]int64, error)
  14. FindPermIdsByUserIdAndEffectForProduct(ctx context.Context, userId int64, effect string, productCode string) ([]int64, error)
  15. DeleteByUserId(ctx context.Context, userId int64) error
  16. DeleteByUserIdTx(ctx context.Context, session sqlx.Session, userId int64) error
  17. DeleteByUserIdForProduct(ctx context.Context, userId int64, productCode string) error
  18. DeleteByUserIdForProductTx(ctx context.Context, session sqlx.Session, userId int64, productCode string) error
  19. }
  20. customSysUserPermModel struct {
  21. *defaultSysUserPermModel
  22. }
  23. )
  24. func NewSysUserPermModel(conn sqlx.SqlConn, c cache.CacheConf, cachePrefix string, opts ...cache.Option) SysUserPermModel {
  25. return &customSysUserPermModel{
  26. defaultSysUserPermModel: newSysUserPermModel(conn, c, cachePrefix, opts...),
  27. }
  28. }
  29. func (m *customSysUserPermModel) FindByUserId(ctx context.Context, userId int64) ([]*SysUserPerm, error) {
  30. var list []*SysUserPerm
  31. query := fmt.Sprintf("SELECT %s FROM %s WHERE `userId` = ?", sysUserPermRows, m.table)
  32. if err := m.QueryRowsNoCacheCtx(ctx, &list, query, userId); err != nil {
  33. return nil, err
  34. }
  35. return list, nil
  36. }
  37. func (m *customSysUserPermModel) FindPermIdsByUserIdAndEffect(ctx context.Context, userId int64, effect string) ([]int64, error) {
  38. var ids []int64
  39. query := fmt.Sprintf("SELECT `permId` FROM %s WHERE `userId` = ? AND `effect` = ?", m.table)
  40. if err := m.QueryRowsNoCacheCtx(ctx, &ids, query, userId, effect); err != nil {
  41. return nil, err
  42. }
  43. return ids, nil
  44. }
  45. func (m *customSysUserPermModel) FindPermIdsByUserIdAndEffectForProduct(ctx context.Context, userId int64, effect string, productCode string) ([]int64, error) {
  46. var ids []int64
  47. query := fmt.Sprintf(
  48. "SELECT up.`permId` FROM %s up INNER JOIN `sys_perm` p ON up.`permId` = p.`id` WHERE up.`userId` = ? AND up.`effect` = ? AND p.`productCode` = ?",
  49. m.table)
  50. if err := m.QueryRowsNoCacheCtx(ctx, &ids, query, userId, effect, productCode); err != nil {
  51. return nil, err
  52. }
  53. return ids, nil
  54. }
  55. func (m *customSysUserPermModel) DeleteByUserId(ctx context.Context, userId int64) error {
  56. query := fmt.Sprintf("DELETE FROM %s WHERE `userId` = ?", m.table)
  57. _, err := m.ExecNoCacheCtx(ctx, query, userId)
  58. return err
  59. }
  60. func (m *customSysUserPermModel) DeleteByUserIdTx(ctx context.Context, session sqlx.Session, userId int64) error {
  61. query := fmt.Sprintf("DELETE FROM %s WHERE `userId` = ?", m.table)
  62. _, err := session.ExecCtx(ctx, query, userId)
  63. return err
  64. }
  65. func (m *customSysUserPermModel) DeleteByUserIdForProduct(ctx context.Context, userId int64, productCode string) error {
  66. query := fmt.Sprintf("DELETE FROM %s WHERE `userId` = ? AND `permId` IN (SELECT `id` FROM `sys_perm` WHERE `productCode` = ?)", m.table)
  67. _, err := m.ExecNoCacheCtx(ctx, query, userId, productCode)
  68. return err
  69. }
  70. func (m *customSysUserPermModel) DeleteByUserIdForProductTx(ctx context.Context, session sqlx.Session, userId int64, productCode string) error {
  71. query := fmt.Sprintf("DELETE FROM %s WHERE `userId` = ? AND `permId` IN (SELECT `id` FROM `sys_perm` WHERE `productCode` = ?)", m.table)
  72. _, err := session.ExecCtx(ctx, query, userId, productCode)
  73. return err
  74. }