diff --git a/internal/db/models/admin_dao.go b/internal/db/models/admin_dao.go index e6b2f942..d7136530 100644 --- a/internal/db/models/admin_dao.go +++ b/internal/db/models/admin_dao.go @@ -36,7 +36,7 @@ func init() { } // 启用条目 -func (this *AdminDAO) EnableAdmin(id uint32) (rowsAffected int64, err error) { +func (this *AdminDAO) EnableAdmin(id int64) (rowsAffected int64, err error) { return this.Query(). Pk(id). Set("state", AdminStateEnabled). @@ -44,7 +44,7 @@ func (this *AdminDAO) EnableAdmin(id uint32) (rowsAffected int64, err error) { } // 禁用条目 -func (this *AdminDAO) DisableAdmin(id uint32) (rowsAffected int64, err error) { +func (this *AdminDAO) DisableAdmin(id int64) (rowsAffected int64, err error) { return this.Query(). Pk(id). Set("state", AdminStateDisabled). @@ -52,7 +52,7 @@ func (this *AdminDAO) DisableAdmin(id uint32) (rowsAffected int64, err error) { } // 查找启用中的条目 -func (this *AdminDAO) FindEnabledAdmin(id uint32) (*Admin, error) { +func (this *AdminDAO) FindEnabledAdmin(id int64) (*Admin, error) { result, err := this.Query(). Pk(id). Attr("state", AdminStateEnabled). @@ -64,7 +64,7 @@ func (this *AdminDAO) FindEnabledAdmin(id uint32) (*Admin, error) { } // 检查管理员是否存在 -func (this *AdminDAO) ExistEnabledAdmin(adminId int) (bool, error) { +func (this *AdminDAO) ExistEnabledAdmin(adminId int64) (bool, error) { return this.Query(). Pk(adminId). State(AdminStateEnabled). @@ -123,6 +123,8 @@ func (this *AdminDAO) UpdateAdminPassword(adminId int64, password string) error // 创建管理员 func (this *AdminDAO) CreateAdmin(username string, password string, fullname string) (int64, error) { op := NewAdminOperator() + op.IsOn = true + op.State = AdminStateEnabled op.Username = username op.Password = stringutil.Md5(password) op.Fullname = fullname @@ -132,3 +134,41 @@ func (this *AdminDAO) CreateAdmin(username string, password string, fullname str } return types.Int64(op.Id), nil } + +// 修改管理员个人资料 +func (this *AdminDAO) UpdateAdmin(adminId int64, fullname string) error { + if adminId <= 0 { + return errors.New("invalid adminId") + } + op := NewAdminOperator() + op.Id = adminId + op.Fullname = fullname + _, err := this.Save(op) + return err +} + +// 检查用户名是否存在 +func (this *AdminDAO) CheckAdminUsername(adminId int64, username string) (bool, error) { + query := this.Query(). + State(AdminStateEnabled). + Attr("username", username) + if adminId > 0 { + query. + Where("id!=:id"). + Param("id", adminId) + } + return query.Exist() +} + +// 修改管理员登录信息 +func (this *AdminDAO) UpdateAdminLogin(adminId int64, username string, password string) error { + if adminId <= 0 { + return errors.New("invalid adminId") + } + op := NewAdminOperator() + op.Id = adminId + op.Username = username + op.Password = stringutil.Md5(password) + _, err := this.Save(op) + return err +} diff --git a/internal/db/models/admin_model.go b/internal/db/models/admin_model.go index 3cd2f2f5..ee186536 100644 --- a/internal/db/models/admin_model.go +++ b/internal/db/models/admin_model.go @@ -9,6 +9,7 @@ type Admin struct { IsSuper uint8 `field:"isSuper"` // 是否为超级管理员 CreatedAt uint64 `field:"createdAt"` // 创建时间 UpdatedAt uint64 `field:"updatedAt"` // 修改时间 + IsOn uint8 `field:"isOn"` // 是否启用 State uint8 `field:"state"` // 状态 } @@ -20,6 +21,7 @@ type AdminOperator struct { IsSuper interface{} // 是否为超级管理员 CreatedAt interface{} // 创建时间 UpdatedAt interface{} // 修改时间 + IsOn interface{} // 是否启用 State interface{} // 状态 } diff --git a/internal/rpc/services/service_admin.go b/internal/rpc/services/service_admin.go index 3c7381fc..81868ad2 100644 --- a/internal/rpc/services/service_admin.go +++ b/internal/rpc/services/service_admin.go @@ -3,6 +3,7 @@ package services import ( "context" "github.com/TeaOSLab/EdgeAPI/internal/db/models" + "github.com/TeaOSLab/EdgeAPI/internal/errors" rpcutils "github.com/TeaOSLab/EdgeAPI/internal/rpc/utils" "github.com/TeaOSLab/EdgeAPI/internal/utils" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" @@ -12,6 +13,7 @@ type AdminService struct { debug bool } +// 登录 func (this *AdminService) LoginAdmin(ctx context.Context, req *pb.LoginAdminRequest) (*pb.LoginAdminResponse, error) { _, _, err := rpcutils.ValidateRequest(ctx) if err != nil { @@ -46,6 +48,7 @@ func (this *AdminService) LoginAdmin(ctx context.Context, req *pb.LoginAdminRequ }, nil } +// 创建操作日志 func (this *AdminService) CreateAdminLog(ctx context.Context, req *pb.CreateAdminLogRequest) (*pb.CreateAdminLogResponse, error) { _, userId, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin) if err != nil { @@ -58,6 +61,7 @@ func (this *AdminService) CreateAdminLog(ctx context.Context, req *pb.CreateAdmi return &pb.CreateAdminLogResponse{}, nil } +// 检查管理员是否存在 func (this *AdminService) CheckAdminExists(ctx context.Context, req *pb.CheckAdminExistsRequest) (*pb.CheckAdminExistsResponse, error) { _, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin) if err != nil { @@ -70,7 +74,7 @@ func (this *AdminService) CheckAdminExists(ctx context.Context, req *pb.CheckAdm }, nil } - ok, err := models.SharedAdminDAO.ExistEnabledAdmin(int(req.AdminId)) + ok, err := models.SharedAdminDAO.ExistEnabledAdmin(req.AdminId) if err != nil { return nil, err } @@ -80,8 +84,26 @@ func (this *AdminService) CheckAdminExists(ctx context.Context, req *pb.CheckAdm }, nil } +// 检查用户名是否存在 +func (this *AdminService) CheckAdminUsername(ctx context.Context, req *pb.CheckAdminUsernameRequest) (*pb.CheckAdminUsernameResponse, error) { + // 校验请求 + _, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin) + if err != nil { + return nil, err + } + + exists, err := models.SharedAdminDAO.CheckAdminUsername(req.AdminId, req.Username) + if err != nil { + return nil, err + } + + return &pb.CheckAdminUsernameResponse{Exists: exists}, nil +} + +// 获取管理员名称 func (this *AdminService) FindAdminFullname(ctx context.Context, req *pb.FindAdminFullnameRequest) (*pb.FindAdminFullnameResponse, error) { - _, _, err := rpcutils.ValidateRequest(ctx) + // 校验请求 + _, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin) if err != nil { return nil, err } @@ -97,8 +119,33 @@ func (this *AdminService) FindAdminFullname(ctx context.Context, req *pb.FindAdm }, nil } +// 获取管理员信息 +func (this *AdminService) FindEnabledAdmin(ctx context.Context, req *pb.FindEnabledAdminRequest) (*pb.FindEnabledAdminResponse, error) { + _, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin) + if err != nil { + return nil, err + } + + admin, err := models.SharedAdminDAO.FindEnabledAdmin(req.AdminId) + if err != nil { + return nil, err + } + if admin == nil { + return &pb.FindEnabledAdminResponse{Admin: nil}, nil + } + + result := &pb.Admin{ + Id: int64(admin.Id), + Fullname: admin.Fullname, + Username: admin.Username, + IsOn: admin.IsOn == 1, + } + return &pb.FindEnabledAdminResponse{Admin: result}, nil +} + // 创建或修改管理员 func (this *AdminService) CreateOrUpdateAdmin(ctx context.Context, req *pb.CreateOrUpdateAdminRequest) (*pb.CreateOrUpdateAdminResponse, error) { + // 校验请求 _, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin, rpcutils.UserTypeAPI) if err != nil { return nil, err @@ -121,3 +168,41 @@ func (this *AdminService) CreateOrUpdateAdmin(ctx context.Context, req *pb.Creat } return &pb.CreateOrUpdateAdminResponse{AdminId: adminId}, nil } + +// 修改管理员信息 +func (this *AdminService) UpdateAdmin(ctx context.Context, req *pb.UpdateAdminRequest) (*pb.RPCUpdateSuccess, error) { + // 校验请求 + _, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin, rpcutils.UserTypeAPI) + if err != nil { + return nil, err + } + + err = models.SharedAdminDAO.UpdateAdmin(req.AdminId, req.Fullname) + if err != nil { + return nil, err + } + return rpcutils.RPCUpdateSuccess() +} + +// 修改管理员登录信息 +func (this *AdminService) UpdateAdminLogin(ctx context.Context, req *pb.UpdateAdminLoginRequest) (*pb.RPCUpdateSuccess, error) { + // 校验请求 + _, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin, rpcutils.UserTypeAPI) + if err != nil { + return nil, err + } + + exists, err := models.SharedAdminDAO.CheckAdminUsername(req.AdminId, req.Username) + if err != nil { + return nil, err + } + if exists { + return nil, errors.New("username already been token") + } + + err = models.SharedAdminDAO.UpdateAdminLogin(req.AdminId, req.Username, req.Password) + if err != nil { + return nil, err + } + return rpcutils.RPCUpdateSuccess() +}