优化结构
This commit is contained in:
@@ -3,8 +3,7 @@ package system
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
|
||||
"kra/internal/biz"
|
||||
"kra/internal/biz/system"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
@@ -13,7 +12,7 @@ var errInvalidDataScope = errors.New("数据权限范围不合法")
|
||||
|
||||
type authorityAccessRepo struct{ data Provider }
|
||||
|
||||
func NewAuthorityAccessRepo(data Provider) biz.AuthorityAccessRepo {
|
||||
func NewAuthorityAccessRepo(data Provider) system.AuthorityAccessRepo {
|
||||
return &authorityAccessRepo{data: data}
|
||||
}
|
||||
|
||||
@@ -58,18 +57,18 @@ func (r *authorityAccessRepo) strictAuthorityIDs(ctx context.Context, actorID ui
|
||||
return allowed, nil
|
||||
}
|
||||
|
||||
func (r *authorityAccessRepo) strictAuthorityAccess(ctx context.Context) (biz.Actor, map[uint]bool, bool, error) {
|
||||
func (r *authorityAccessRepo) strictAuthorityAccess(ctx context.Context) (system.Actor, map[uint]bool, bool, error) {
|
||||
config := r.data.Runtime().Admin()
|
||||
if config == nil || config.System == nil || !config.System.UseStrictAuth {
|
||||
return biz.Actor{}, nil, false, nil
|
||||
return system.Actor{}, nil, false, nil
|
||||
}
|
||||
actor, ok := biz.ActorFromContext(ctx)
|
||||
actor, ok := system.ActorFromContext(ctx)
|
||||
if !ok {
|
||||
return biz.Actor{}, nil, true, errors.New("您提交的角色ID不合法")
|
||||
return system.Actor{}, nil, true, errors.New("您提交的角色ID不合法")
|
||||
}
|
||||
allowed, err := r.strictAuthorityIDs(ctx, actor.AuthorityID)
|
||||
if err != nil {
|
||||
return biz.Actor{}, nil, true, err
|
||||
return system.Actor{}, nil, true, err
|
||||
}
|
||||
return actor, allowed, true, nil
|
||||
}
|
||||
@@ -91,7 +90,7 @@ func (r *authorityAccessRepo) checkAuthorityIDAuth(ctx context.Context, targetID
|
||||
return r.checkAuthorityIDsAuth(ctx, []uint{targetID})
|
||||
}
|
||||
|
||||
func managedAuthorityParent(actor biz.Actor, allowed map[uint]bool, targetID uint, parentID *uint, creating bool) (*uint, error) {
|
||||
func managedAuthorityParent(actor system.Actor, allowed map[uint]bool, targetID uint, parentID *uint, creating bool) (*uint, error) {
|
||||
if creating && (parentID == nil || *parentID == 0) {
|
||||
value := actor.AuthorityID
|
||||
return &value, nil
|
||||
@@ -131,7 +130,7 @@ func (r *authorityAccessRepo) ensureAuthorityParentAcyclic(ctx context.Context,
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *authorityAccessRepo) CreateAuthority(ctx context.Context, value *biz.Authority) error {
|
||||
func (r *authorityAccessRepo) CreateAuthority(ctx context.Context, value *system.Authority) error {
|
||||
if value.DataScope == 0 {
|
||||
value.DataScope = 1
|
||||
} else if value.DataScope < 1 || value.DataScope > 5 {
|
||||
@@ -168,7 +167,7 @@ func (r *authorityAccessRepo) CreateAuthority(ctx context.Context, value *biz.Au
|
||||
}
|
||||
value.CreatedAt, value.UpdatedAt = po.CreatedAt, po.UpdatedAt
|
||||
value.DataScope, value.DefaultRouter = po.DataScope, po.DefaultRouter
|
||||
value.Menus = []*biz.Menu{{ID: 1, Path: "dashboard", Name: "dashboard", Component: "view/dashboard/index.vue", Sort: 1, Title: "仪表盘", Icon: "setting"}}
|
||||
value.Menus = []*system.Menu{{ID: 1, Path: "dashboard", Name: "dashboard", Component: "view/dashboard/index.vue", Sort: 1, Title: "仪表盘", Icon: "setting"}}
|
||||
var dashboard menuPO
|
||||
if err := tx.Where("name = ?", "dashboard").First(&dashboard).Error; err == nil {
|
||||
grantDashboard := true
|
||||
@@ -209,7 +208,7 @@ func (r *authorityAccessRepo) CreateAuthority(ctx context.Context, value *biz.Au
|
||||
return nil
|
||||
})
|
||||
}
|
||||
func (r *authorityAccessRepo) CopyAuthority(ctx context.Context, sourceID uint, value *biz.Authority) error {
|
||||
func (r *authorityAccessRepo) CopyAuthority(ctx context.Context, sourceID uint, value *system.Authority) error {
|
||||
if value.DataScope == 0 {
|
||||
value.DataScope = 1
|
||||
} else if value.DataScope < 1 || value.DataScope > 5 {
|
||||
@@ -283,7 +282,7 @@ func (r *authorityAccessRepo) CopyAuthority(ctx context.Context, sourceID uint,
|
||||
if err := tx.Where("id IN ?", menuIDs).Order("sort").Find(&copiedMenus).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
value.Menus = make([]*biz.Menu, 0, len(copiedMenus))
|
||||
value.Menus = make([]*system.Menu, 0, len(copiedMenus))
|
||||
for _, menu := range copiedMenus {
|
||||
value.Menus = append(value.Menus, menuFromPO(menu))
|
||||
}
|
||||
@@ -362,7 +361,7 @@ func (r *authorityAccessRepo) copyPolicyAllowed(ctx context.Context, tx *gorm.DB
|
||||
}
|
||||
return policyExists(tx.WithContext(ctx), actorID, path, method)
|
||||
}
|
||||
func (r *authorityAccessRepo) UpdateAuthority(ctx context.Context, value *biz.Authority) error {
|
||||
func (r *authorityAccessRepo) UpdateAuthority(ctx context.Context, value *system.Authority) error {
|
||||
if err := r.checkAuthorityIDAuth(ctx, value.AuthorityID); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -464,11 +463,11 @@ func (r *authorityAccessRepo) DeleteAuthority(ctx context.Context, id uint) erro
|
||||
return tx.Unscoped().Delete(&authorityPO{}, "authority_id = ?", id).Error
|
||||
})
|
||||
}
|
||||
func (r *authorityAccessRepo) ListAuthorities(ctx context.Context) ([]*biz.Authority, error) {
|
||||
func (r *authorityAccessRepo) ListAuthorities(ctx context.Context) ([]*system.Authority, error) {
|
||||
db := r.data.DB().WithContext(ctx)
|
||||
var allowed map[uint]bool
|
||||
config := r.data.Runtime().Admin()
|
||||
if actor, ok := biz.ActorFromContext(ctx); ok {
|
||||
if actor, ok := system.ActorFromContext(ctx); ok {
|
||||
// The current authority is loaded even when strict mode is disabled;
|
||||
// an invalid token authority therefore fails the list request instead of
|
||||
// exposing the complete role tree.
|
||||
@@ -488,7 +487,7 @@ func (r *authorityAccessRepo) ListAuthorities(ctx context.Context) ([]*biz.Autho
|
||||
if err := db.Find(&pos).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
out := make([]*biz.Authority, 0, len(pos))
|
||||
out := make([]*system.Authority, 0, len(pos))
|
||||
for _, po := range pos {
|
||||
if allowed != nil && !allowed[po.AuthorityID] {
|
||||
continue
|
||||
@@ -752,8 +751,8 @@ func (r *authorityAccessRepo) DataScopeDepartmentIDs(ctx context.Context, id uin
|
||||
err := r.data.DB().WithContext(ctx).Model(&authorityDepartmentPO{}).Where("sys_authority_authority_id = ?", id).Pluck("sys_department_id", &ids).Error
|
||||
return ids, err
|
||||
}
|
||||
func (r *authorityAccessRepo) ResolveDataScope(ctx context.Context, authorityID, userID uint) (biz.DataScope, error) {
|
||||
identity := biz.DataScope{UserID: userID, AuthorityID: authorityID}
|
||||
func (r *authorityAccessRepo) ResolveDataScope(ctx context.Context, authorityID, userID uint) (system.DataScope, error) {
|
||||
identity := system.DataScope{UserID: userID, AuthorityID: authorityID}
|
||||
var user userPO
|
||||
if err := r.data.DB().WithContext(ctx).Select("id", "dept_id").First(&user, userID).Error; err != nil {
|
||||
return identity, err
|
||||
|
||||
Reference in New Issue
Block a user