-
Notifications
You must be signed in to change notification settings - Fork 66
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
【删除回收】目录删除 #901
Comments
当前目录删除的时,会对其下的人员(enable=0,status=delete)以及部门(enable=False), 定时任务删除。还原时候后,需将人员或者部门进行同步还原?定时同步任务呢?只是单单将目录给还原?@wklken |
当前目录删除是软删除, 只动了目录的状态, 不会动人员和部门
|
还原需要注意冲突检测 issue 描述写得比较全, 多仔细读几遍 |
方案设计, 需要画状态流转图, 一个目录的生命周期, 状态怎么流转的, 以及每个状态对应 model 中的属性值是什么 |
这两源码指向,表示目录软删除,会对相应资源做操作。 |
注释掉
然后, 还原函数的逻辑是 |
1. 新增目录状态Delete, 异常状态目录下的用户限制登录
class CategoryStatus(AutoLowerEnum):
....
DELETE = auto()
....
2. 数据迁移:新增迁移文件,存量已删除目录(status=INACTIVE and enable=False) 的数据记录 在回收站新增相应的映射记录,同时status=INACTIVE, enable=False => status=DELETE, enable=False)
3. 重写ProfileCategory.delete方法
def delete(self):
1.保护默认用户目录不被删除
2.删除周期任务:PeriodTask=>enabled=False
3. 不动profile,department,settings
3.变更目录状态enabled=0, status=delete, update_time
4. 目录删除接口增加校验,停用后才可进行删除
def delete(self, request, *args, **kwargs):
"""删除用户目录"""
....
# 增加目录状态校验:停用后,才可删除
# 依赖 model 的 delete 方法, 执行软删除
instance.soft_delete()
....
# 审计日志接入
# 回收站数据新增
recycle_map_generate(....)
return Response(status=status.HTTP_200_OK) 2.接口设计 2.1 功能说明:目录还原预先检查 URL: "api/v1/web/recycle_bin/categories/check/" Method: POST body
response
# 目录还原预先检查
url:path("recycle_bin/categories/check")
class CategoryBatchRevertInputSLZ():
category_ids = serializers.ListFeild()
class CategoryBatchRevertCheckOutputSLZ():
category_id = IntegerField()
category_display_name = CharField
check_status = BoolField
error_message = CharField
class RecycleBinBatchCategoryRevertCheckApi()
def post():
# request.data slz校验 CategoryBatchRevertInputSLZs
# object_list 下的目录进行冲突校验
# 重名冲突
# 域名重复冲突
# 返回冲突校验结果
return CategoryBatchRevertCheckOutputSLZ.data 2.2 功能说明:目录还原 URL: "api/v1/web/recycle_bin/categories/revert/" Method: POST body
response None # 检查通过的目录才可调用
url:path("recycle_bin/categories/revert/")
class RecycleBinBatchCategoryRevertApi()
def post():
# request.data slz校验 CategoryBatchRevertInputSLZ
object_type_instance = RecycleBin.object.filter(...).value_list(....)
# 变更状态
return Response 2.3 功能说明:目录对象硬删除 URL: "api/v1/web/recycle_bin/categories/<int:id >/" Method: Delete url_params
response: None
# 对象硬删除
url: path("recycle_bin/categories/<int:id >")
class RecycleBinCategoryHardDelete()
def delete():
# 获取对应数据的模型对象
instance = self.get_object()
# 数据关联资源删除
# 进行硬删除,添加审计日志
return Response
|
接口设计部分: |
关于周期任务PeriodicTask模型有enable字段,enable=0使周期任务无效化,无需进行额外存储
instance.soft_delete => instance.delete 接口设计: |
直接在原始方案上调整一下哩,方案呈现最终修改的结果就可以 |
…,还原功能 回收站内删除等同对象硬删除(相关资源一并删除),还原为对象恢复正常状态,操作计入审计日志;阻止异常状态目录用户登录; BREAKING CHANGE: 原category.delete()将对应的资源disable且删除定时任务。新delete不会操作其资源,定期任务disable无效化,进行硬删除才将定时任务删除 feat TencentBlueKing#901
…,还原功能 回收站内删除等同对象硬删除(相关资源一并删除),还原为对象恢复正常状态,操作计入审计日志;阻止异常状态目录用户登录; BREAKING CHANGE: 原category.delete()将对应的资源disable且删除定时任务。新delete不会操作其资源,定期任务disable无效化,进行硬删除才将定时任务删除 feat TencentBlueKing#901
产品确认细节:
|
当前目录的domain字段数据库层面上是唯一的,逻辑层面也做了校验,已经是无法创建相同登录域的目录。 |
mad/ldap类型目录进行停用目录操作,其定时同步任务仍在执行 |
TencentBlueKing#962) * feat(recycle_bin, categories, audit, period_task, login): 回收站目录项:新增删除,还原功能 回收站内删除等同对象硬删除(相关资源一并删除),还原为对象恢复正常状态,操作计入审计日志;阻止异常状态目录用户登录; feat TencentBlueKing#901 TencentBlueKing#960
TencentBlueKing#962) * feat(recycle_bin, categories, audit, period_task, login): 回收站目录项:新增删除,还原功能 回收站内删除等同对象硬删除(相关资源一并删除),还原为对象恢复正常状态,操作计入审计日志;阻止异常状态目录用户登录; feat TencentBlueKing#901 TencentBlueKing#960
目录删除
相关原型
The text was updated successfully, but these errors were encountered: