mirror of
https://github.com/TeaOSLab/EdgeAPI.git
synced 2025-11-22 14:30:25 +08:00
增加修改全体用户功能API
This commit is contained in:
@@ -10,6 +10,7 @@ import (
|
|||||||
_ "github.com/go-sql-driver/mysql"
|
_ "github.com/go-sql-driver/mysql"
|
||||||
"github.com/iwind/TeaGo/Tea"
|
"github.com/iwind/TeaGo/Tea"
|
||||||
"github.com/iwind/TeaGo/dbs"
|
"github.com/iwind/TeaGo/dbs"
|
||||||
|
"github.com/iwind/TeaGo/lists"
|
||||||
"github.com/iwind/TeaGo/types"
|
"github.com/iwind/TeaGo/types"
|
||||||
stringutil "github.com/iwind/TeaGo/utils/string"
|
stringutil "github.com/iwind/TeaGo/utils/string"
|
||||||
timeutil "github.com/iwind/TeaGo/utils/time"
|
timeutil "github.com/iwind/TeaGo/utils/time"
|
||||||
@@ -352,7 +353,7 @@ func (this *UserDAO) FindUserClusterId(tx *dbs.Tx, userId int64) (int64, error)
|
|||||||
FindInt64Col(0)
|
FindInt64Col(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
// UpdateUserFeatures 更新用户Features
|
// UpdateUserFeatures 更新单个用户Features
|
||||||
func (this *UserDAO) UpdateUserFeatures(tx *dbs.Tx, userId int64, featuresJSON []byte) error {
|
func (this *UserDAO) UpdateUserFeatures(tx *dbs.Tx, userId int64, featuresJSON []byte) error {
|
||||||
if userId <= 0 {
|
if userId <= 0 {
|
||||||
return errors.New("invalid userId")
|
return errors.New("invalid userId")
|
||||||
@@ -370,6 +371,74 @@ func (this *UserDAO) UpdateUserFeatures(tx *dbs.Tx, userId int64, featuresJSON [
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UpdateUsersFeatures 更新所有用户的Features
|
||||||
|
func (this *UserDAO) UpdateUsersFeatures(tx *dbs.Tx, featureCodes []string, overwrite bool) error {
|
||||||
|
if featureCodes == nil {
|
||||||
|
featureCodes = []string{}
|
||||||
|
}
|
||||||
|
if overwrite {
|
||||||
|
featureCodesJSON, err := json.Marshal(featureCodes)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
err = this.Query(tx).
|
||||||
|
State(UserStateEnabled).
|
||||||
|
Set("features", featureCodesJSON).
|
||||||
|
UpdateQuickly()
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
var lastId int64
|
||||||
|
const size = 1000
|
||||||
|
for {
|
||||||
|
ones, _, err := this.Query(tx).
|
||||||
|
Result("id", "features").
|
||||||
|
State(UserStateEnabled).
|
||||||
|
Gt("id", lastId).
|
||||||
|
Limit(size).
|
||||||
|
AscPk().
|
||||||
|
FindOnes()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for _, one := range ones {
|
||||||
|
var userId = one.GetInt64("id")
|
||||||
|
var userFeaturesJSON = one.GetBytes("features")
|
||||||
|
var userFeatures = []string{}
|
||||||
|
if len(userFeaturesJSON) > 0 {
|
||||||
|
err = json.Unmarshal(userFeaturesJSON, &userFeatures)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for _, featureCode := range featureCodes {
|
||||||
|
if !lists.ContainsString(userFeatures, featureCode) {
|
||||||
|
userFeatures = append(userFeatures, featureCode)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
userFeaturesJSON, err = json.Marshal(userFeatures)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
err = this.Query(tx).
|
||||||
|
Pk(userId).
|
||||||
|
Set("features", userFeaturesJSON).
|
||||||
|
UpdateQuickly()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(ones) < size {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
lastId += size
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// FindUserFeatures 查找用户Features
|
// FindUserFeatures 查找用户Features
|
||||||
func (this *UserDAO) FindUserFeatures(tx *dbs.Tx, userId int64) ([]*userconfigs.UserFeature, error) {
|
func (this *UserDAO) FindUserFeatures(tx *dbs.Tx, userId int64) ([]*userconfigs.UserFeature, error) {
|
||||||
featuresJSON, err := this.Query(tx).
|
featuresJSON, err := this.Query(tx).
|
||||||
|
|||||||
@@ -1,5 +1,21 @@
|
|||||||
package models
|
package models
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/TeaOSLab/EdgeCommon/pkg/userconfigs"
|
||||||
_ "github.com/go-sql-driver/mysql"
|
_ "github.com/go-sql-driver/mysql"
|
||||||
|
_ "github.com/iwind/TeaGo/bootstrap"
|
||||||
|
"github.com/iwind/TeaGo/dbs"
|
||||||
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func TestUserDAO_UpdateUserFeatures(t *testing.T) {
|
||||||
|
var dao = NewUserDAO()
|
||||||
|
var tx *dbs.Tx
|
||||||
|
err := dao.UpdateUsersFeatures(tx, []string{
|
||||||
|
userconfigs.UserFeatureCodeFinance,
|
||||||
|
userconfigs.UserFeatureCodeServerACME,
|
||||||
|
}, false)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -557,6 +557,22 @@ func (this *UserService) UpdateUserFeatures(ctx context.Context, req *pb.UpdateU
|
|||||||
return this.Success()
|
return this.Success()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UpdateAllUsersFeatures 设置所有用户能使用的功能
|
||||||
|
func (this *UserService) UpdateAllUsersFeatures(ctx context.Context, req *pb.UpdateAllUsersFeaturesRequest) (*pb.RPCSuccess, error) {
|
||||||
|
_, err := this.ValidateAdmin(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var tx = this.NullTx()
|
||||||
|
err = models.SharedUserDAO.UpdateUsersFeatures(tx, req.FeatureCodes, req.Overwrite)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.Success()
|
||||||
|
}
|
||||||
|
|
||||||
// FindUserFeatures 获取用户所有的功能列表
|
// FindUserFeatures 获取用户所有的功能列表
|
||||||
func (this *UserService) FindUserFeatures(ctx context.Context, req *pb.FindUserFeaturesRequest) (*pb.FindUserFeaturesResponse, error) {
|
func (this *UserService) FindUserFeatures(ctx context.Context, req *pb.FindUserFeaturesRequest) (*pb.FindUserFeaturesResponse, error) {
|
||||||
_, userId, err := this.ValidateAdminAndUser(ctx)
|
_, userId, err := this.ValidateAdminAndUser(ctx)
|
||||||
|
|||||||
Reference in New Issue
Block a user