archery-魔改之审核人不能自提自审

一、背景

为了满足业务需求,需要保证archery不能自提自审,当然,这样做也是一种更安全的做法,简单的阅读下源码,有了个大体的思路,话不多说,直接上代码

二、修改部分

vi /opt/archery/sql/utils/workflow_audit.py

archery-魔改之审核人不能自提自审_第1张图片

三、解释

这里可以看到改动的部分比较简单
can_review方法为当前审核人能不能审核工单,result为true的话则表示可以审核,所以这里面只需要把user为create_user的用户去掉就好

相关代码

Archery/sql/utils/resource_group.py

def auth_group_users(auth_group_names, group_id):
    """
    获取资源组内关联指定权限组的用户
    :param auth_group_names: 权限组名称list
    :param group_id: 资源组ID
    :return:
    """
    # 获取资源组关联的用户
    # users_set 即表名后接_set是指反向查询,查询users表中的
    # resource_group = models.ManyToManyField(ResourceGroup, verbose_name='资源组', blank=True) 查对应的users表的信息
    # 个人觉得相当于的查询是 select * from  sql_users where id in ( select users_id from sql_users_resource_group where resourcegroup_id=group_id);
    users = ResourceGroup.objects.get(group_id=group_id).users_set.all()
    # 过滤在该权限组中的用户
    # 字段后面接__in代表的是in查询
    # select * from  sql_users where id in (select users_id from sql_users_groups where group_id=7);
    users = users.filter(groups__name__in=auth_group_names)
    return users


# models.py
class Users(AbstractUser):
    """
    用户信息扩展
    """
    display = models.CharField('显示的中文名', max_length=50, default='')
    ding_user_id = models.CharField('钉钉UserID', max_length=64, blank=True)
    wx_user_id = models.CharField('企业微信UserID', max_length=64, blank=True)
    feishu_open_id = models.CharField('飞书OpenID', max_length=64, blank=True)
    failed_login_count = models.IntegerField('失败计数', default=0)
    last_login_failed_at = models.DateTimeField('上次失败登录时间', blank=True, null=True)
    # 反向查询关联字段
    resource_group = models.ManyToManyField(ResourceGroup, verbose_name='资源组', blank=True)

    def save(self, *args, **kwargs):
        self.failed_login_count = min(127, self.failed_login_count)
        self.failed_login_count = max(0, self.failed_login_count)
        super(Users, self).save(*args, **kwargs)

    def __str__(self):
        if self.display:
            return self.display
        return self.username

    class Meta:
        managed = True
        db_table = 'sql_users'
        verbose_name = u'用户管理'
        verbose_name_plural = u'用户管理'

你可能感兴趣的:(archery,数据库)