authority.go 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package system
  2. import (
  3. "context"
  4. "github.com/pkg/errors"
  5. "gorm.io/gorm"
  6. sysModel "server/model/system"
  7. "server/service/system"
  8. "server/utils"
  9. )
  10. const initOrderAuthority = initOrderCasbin + 1
  11. type initAuthority struct{}
  12. // auto run
  13. func init() {
  14. system.RegisterInit(initOrderAuthority, &initAuthority{})
  15. }
  16. func (i *initAuthority) MigrateTable(ctx context.Context) (context.Context, error) {
  17. db, ok := ctx.Value("db").(*gorm.DB)
  18. if !ok {
  19. return ctx, system.ErrMissingDBContext
  20. }
  21. return ctx, db.AutoMigrate(&sysModel.SysAuthority{})
  22. }
  23. func (i *initAuthority) TableCreated(ctx context.Context) bool {
  24. db, ok := ctx.Value("db").(*gorm.DB)
  25. if !ok {
  26. return false
  27. }
  28. return db.Migrator().HasTable(&sysModel.SysAuthority{})
  29. }
  30. func (i initAuthority) InitializerName() string {
  31. return sysModel.SysAuthority{}.TableName()
  32. }
  33. func (i *initAuthority) InitializeData(ctx context.Context) (context.Context, error) {
  34. db, ok := ctx.Value("db").(*gorm.DB)
  35. if !ok {
  36. return ctx, system.ErrMissingDBContext
  37. }
  38. entities := []sysModel.SysAuthority{
  39. {AuthorityId: 888, AuthorityName: "普通用户", ParentId: utils.Pointer[uint](0), DefaultRouter: "dashboard"},
  40. {AuthorityId: 9528, AuthorityName: "测试角色", ParentId: utils.Pointer[uint](0), DefaultRouter: "dashboard"},
  41. {AuthorityId: 8881, AuthorityName: "普通用户子角色", ParentId: utils.Pointer[uint](888), DefaultRouter: "dashboard"},
  42. }
  43. if err := db.Create(&entities).Error; err != nil {
  44. return ctx, errors.Wrapf(err, "%s表数据初始化失败!", sysModel.SysAuthority{}.TableName())
  45. }
  46. // data authority
  47. if err := db.Model(&entities[0]).Association("DataAuthorityId").Replace(
  48. []*sysModel.SysAuthority{
  49. {AuthorityId: 888},
  50. {AuthorityId: 9528},
  51. {AuthorityId: 8881},
  52. }); err != nil {
  53. return ctx, errors.Wrapf(err, "%s表数据初始化失败!",
  54. db.Model(&entities[0]).Association("DataAuthorityId").Relationship.JoinTable.Name)
  55. }
  56. if err := db.Model(&entities[1]).Association("DataAuthorityId").Replace(
  57. []*sysModel.SysAuthority{
  58. {AuthorityId: 9528},
  59. {AuthorityId: 8881},
  60. }); err != nil {
  61. return ctx, errors.Wrapf(err, "%s表数据初始化失败!",
  62. db.Model(&entities[1]).Association("DataAuthorityId").Relationship.JoinTable.Name)
  63. }
  64. next := context.WithValue(ctx, i.InitializerName(), entities)
  65. return next, nil
  66. }
  67. func (i *initAuthority) DataInserted(ctx context.Context) bool {
  68. db, ok := ctx.Value("db").(*gorm.DB)
  69. if !ok {
  70. return false
  71. }
  72. if errors.Is(db.Where("authority_id = ?", "8881").
  73. First(&sysModel.SysAuthority{}).Error, gorm.ErrRecordNotFound) { // 判断是否存在数据
  74. return false
  75. }
  76. return true
  77. }