完成账户处罚

dev
truthhun 10 months ago
parent 289bbc7d6c
commit aa653542b5

@ -186,7 +186,7 @@ func (s *AttachmentAPIService) UploadDocument(ctx *gin.Context) {
}
// 检查用户是否有权限上传文档
if !s.dbModel.CanIUploadDocument(userClaims.UserId) {
if !s.dbModel.CanIAccessUploadDocument(userClaims.UserId) {
ctx.JSON(http.StatusForbidden, ginResponse{Code: http.StatusForbidden, Message: "没有权限上传文档", Error: "没有权限上传文档"})
return
}

@ -47,6 +47,10 @@ func (s *CommentAPIService) CreateComment(ctx context.Context, req *pb.CreateCom
return nil, status.Errorf(codes.InvalidArgument, "验证码错误")
}
if yes, _ := s.dbModel.CanIAccessComment(userClaims.UserId); !yes {
return nil, status.Errorf(codes.PermissionDenied, "您已经被禁止发表评论")
}
comment := &model.Comment{}
err = util.CopyStruct(req, comment)
if err != nil {

@ -54,7 +54,7 @@ func (s *DocumentAPIService) CreateDocument(ctx context.Context, req *pb.CreateD
return nil, err
}
if !s.dbModel.CanIUploadDocument(userCliams.UserId) {
if !s.dbModel.CanIAccessUploadDocument(userCliams.UserId) {
return nil, status.Error(codes.PermissionDenied, "没有权限上传文档")
}
@ -673,6 +673,10 @@ func (s *DocumentAPIService) DownloadDocument(ctx context.Context, req *pb.Docum
userId = userClaims.UserId
}
if yes, _ := s.dbModel.CanIAccessDownload(userId); !yes {
return res, status.Errorf(codes.PermissionDenied, "您的账户已被禁止下载文档")
}
ip := ""
ips, _ := util.GetGRPCRemoteIP(ctx)
if len(ips) > 0 {

@ -34,6 +34,11 @@ func (s *FavoriteAPIService) CreateFavorite(ctx context.Context, req *pb.Favorit
return nil, err
}
yes, _ := s.dbModel.CanIAccessFavorite(userClaims.UserId)
if !yes {
return nil, status.Errorf(codes.PermissionDenied, "您已经被禁止收藏文档")
}
favorite := &model.Favorite{
UserId: userClaims.UserId,
DocumentId: req.DocumentId,

@ -541,7 +541,7 @@ func (s *UserAPIService) CanIUploadDocument(ctx context.Context, req *emptypb.Em
return nil, err
}
if !s.dbModel.CanIUploadDocument(userClaims.UserId) {
if !s.dbModel.CanIAccessUploadDocument(userClaims.UserId) {
return nil, status.Errorf(codes.PermissionDenied, "您没有上传文档的权限")
}

@ -165,3 +165,24 @@ func (m *DBModel) DeletePunishment(ids []int64) (err error) {
}
return
}
func (m *DBModel) isInPunishing(userId int64, types []int) (yes bool, err error) {
if userId <= 1 {
return false, nil
}
punishment := &Punishment{}
err = m.db.Model(punishment).Select("id").
Where(
"user_id = ? and enable = ? and type in ? and (end_time IS NULL or end_time > ?)",
userId, true, types, time.Now(),
).Find(&punishment).Error
if err != nil {
if err == gorm.ErrRecordNotFound {
return false, nil
}
m.logger.Error("isInPunishing", zap.Error(err))
return
}
return punishment.Id > 0, nil
}

@ -411,7 +411,13 @@ func (m *DBModel) SetUserGroupAndPassword(userId int64, groupId []int64, passwor
}
// CanIUploadDocument 判断用户是否有上传文档的权限
func (m *DBModel) CanIUploadDocument(userId int64) (yes bool) {
// 1. 用户是否被禁用或被处罚禁止上传文档
// 2. 用户所在的用户组是否允许上传文档
func (m *DBModel) CanIAccessUploadDocument(userId int64) (yes bool) {
if inPunishing, _ := m.isInPunishing(userId, []int{PunishmentTypeDisabled, PunishmentTypeUploadLimited}); inPunishing {
return false
}
var (
tableGroup = Group{}.TableName()
tableUserGroup = UserGroup{}.TableName()
@ -427,6 +433,39 @@ func (m *DBModel) CanIUploadDocument(userId int64) (yes bool) {
return group.Id > 0
}
// 用户是否可以下载文档:被禁用的账号或被禁止下载的账户不能下载
func (m *DBModel) CanIAccessDownload(userId int64) (yes bool, err error) {
yes, err = m.isInPunishing(userId, []int{PunishmentTypeDownloadLimited, PunishmentTypeDisabled})
yes = !yes
if err != nil {
m.logger.Error("CanIAccessDownload", zap.Error(err))
return
}
return
}
// 用户是否可以评论
func (m *DBModel) CanIAccessComment(userId int64) (yes bool, err error) {
yes, err = m.isInPunishing(userId, []int{PunishmentTypeCommentLimited, PunishmentTypeDisabled})
yes = !yes
if err != nil {
m.logger.Error("CanIAccessComment", zap.Error(err))
return
}
return
}
// 用户是否可以收藏文档
func (m *DBModel) CanIAccessFavorite(userId int64) (yes bool, err error) {
yes, err = m.isInPunishing(userId, []int{PunishmentTypeFavoriteLimited, PunishmentTypeDisabled})
yes = !yes
if err != nil {
m.logger.Error("CanIAccessFavorite", zap.Error(err))
return
}
return
}
// 用户是否发表评论
func (m *DBModel) CanIPublishComment(userId int64) (defaultCommentStatus int8, err error) {
if userId <= 0 {

@ -36,7 +36,18 @@
</el-select>
<el-input v-else :disabled="true" v-model="punishment.username" />
</el-form-item>
<el-form-item label="处罚类型">
<el-form-item
prop="type"
:rules="[
{ required: true, trigger: 'blur', message: '' },
]"
>
<template slot="label">
<ToolTip
content="禁止评论:不允许发表评论;禁止上传:不允许上传文档;禁止收藏:不允许收藏;禁止下载:不允许下载文档;禁用账户:包括上述全部禁用项"
/>
</template>
<el-checkbox-group v-if="punishment.id === 0" v-model="punishment.type">
<el-checkbox
v-for="item in punishmentTypeOptions"

@ -113,7 +113,7 @@ export default {
groups: [],
users: [],
user: { id: 0 },
total: 100,
total: 0,
searchFormFields: [],
listFields: [],
selectedRows: [],
@ -308,14 +308,14 @@ export default {
}
}),
},
{
type: 'select',
label: '',
name: 'status',
placeholder: '',
multiple: true,
options: this.userStatusOptions,
},
// {
// type: 'select',
// label: '状态',
// name: 'status',
// placeholder: '请选择用户状态',
// multiple: true,
// options: this.userStatusOptions,
// },
]
},
initTableListFields() {

@ -166,7 +166,7 @@
class="btn-block"
disabled
>
<span v-if="user.id > 0"></span>
<span v-if="user.id > 0"></span>
<span v-else></span>
</el-button>
</el-form-item>

Loading…
Cancel
Save