sysUserPermModel.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  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. FindPermIdsByUserIdAndEffectForProduct(ctx context.Context, userId int64, effect string, productCode string) ([]int64, error)
  13. DeleteByUserIdForProductTx(ctx context.Context, session sqlx.Session, userId int64, productCode string) error
  14. }
  15. customSysUserPermModel struct {
  16. *defaultSysUserPermModel
  17. }
  18. )
  19. func NewSysUserPermModel(conn sqlx.SqlConn, c cache.CacheConf, cachePrefix string, opts ...cache.Option) SysUserPermModel {
  20. return &customSysUserPermModel{
  21. defaultSysUserPermModel: newSysUserPermModel(conn, c, cachePrefix, opts...),
  22. }
  23. }
  24. func (m *customSysUserPermModel) FindPermIdsByUserIdAndEffectForProduct(ctx context.Context, userId int64, effect string, productCode string) ([]int64, error) {
  25. var ids []int64
  26. query := fmt.Sprintf(
  27. "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` = ?",
  28. m.table)
  29. if err := m.QueryRowsNoCacheCtx(ctx, &ids, query, userId, effect, productCode); err != nil {
  30. return nil, err
  31. }
  32. return ids, nil
  33. }
  34. func (m *customSysUserPermModel) DeleteByUserIdForProductTx(ctx context.Context, session sqlx.Session, userId int64, productCode string) error {
  35. query := fmt.Sprintf("DELETE FROM %s WHERE `userId` = ? AND `permId` IN (SELECT `id` FROM `sys_perm` WHERE `productCode` = ?)", m.table)
  36. _, err := session.ExecCtx(ctx, query, userId, productCode)
  37. return err
  38. }