二次开发Jumpserver,增加权限申请模块实现用户组归属,服务器及组授权,系统用户授权申请处理

这是jumpserver二次开发系列第三篇,主要实现用户权限的自主申请、审批和授权功能。有两种方式申请权限:

1、加入用户组,拥有与该用户组相同的权限;

2、按资产、资产组及系统用户申请相应权限。

一、数据库模型设计

其中用户、用户组、资产、资产组及系统用户为原来各模块已设计的表

二、model代码

权限申请表与用户、用户组、资产、资产组及系统用户使用ManyToManyField定义关系

class Checker(models.Model):
    checker_um = models.CharField(max_length=50, unique=True)
    checker_name = models.CharField(max_length=50, null=True)
    checker_role = models.CharField(max_length=100, null=True)

    def __unicode__(self):
        return self.checker_name

class CheckOrder(models.Model):
    check_order = models.IntegerField(unique=True)
    checker = models.ForeignKey(Checker, related_name=‘check_order‘)
    check_desc = models.CharField(max_length=100, null=True)

class RightApply(models.Model):
    app_name = models.CharField(max_length=100, unique=True)
    app_desc = models.CharField(max_length=100, null=True)
    insert_time = models.TimeField(auto_now=True)
    finish_time = models.TimeField(null=True)
    checkorder = models.ForeignKey(CheckOrder, related_name=‘right_app‘)
    asset = models.ManyToManyField(Asset, related_name=‘right_app‘)
    asset_group = models.ManyToManyField(AssetGroup, related_name=‘right_app‘)
    user = models.ManyToManyField(User, related_name=‘right_app‘)
    user_group = models.ManyToManyField(UserGroup, related_name=‘right_app‘)
    role = models.ManyToManyField(PermRole, related_name=‘right_app‘)
    APP_TYPE_CHOICES = (
        (‘ZCQX‘, u‘资产权限申请‘),
        (‘GPQX‘, u‘用户组权限申请‘)
    )
    app_type = models.CharField(max_length=8, choices=APP_TYPE_CHOICES, default=‘ZCQX‘)

    def __unicode__(self):
        return self.app_name

class CheckList(models.Model):
    rightapply = models.ForeignKey(RightApply, related_name=‘check_list‘)
    checkorder = models.ForeignKey(CheckOrder, related_name=‘check_list‘)
    insert_time = models.TimeField(auto_now=True)
    finish_time = models.TimeField(null=True)
    check_status = models.NullBooleanField(null=True)
    check_if = models.NullBooleanField(default=False)
    check_desc = models.TextField(null=True)

三、URLS

urlpatterns = patterns(‘rightapply.views‘,
                       url(r‘^apply/list/$‘, ‘apply_list‘, name=‘app_list‘),
                       url(r‘^apply/add/$‘, ‘apply_add‘, name=‘app_add‘),
                       url(r‘^apply/add_by_gpqx/$‘, ‘add_by_gpqx‘, name=‘add_by_gpqx‘),
                       url(r‘^apply/check_list/$‘, ‘check_list‘, name=‘check_list‘),
                       url(r‘^apply/check_app/$‘, ‘check_app‘, name=‘check_app‘),
                       url(r‘^apply/follow/$‘, ‘follow_app‘, name=‘follow_app‘),
                       url(r‘^apply/app_detail/$‘, ‘app_detail‘, name=‘app_detail‘),
                       url(r‘^apply/del/$‘, ‘apply_del‘, name=‘app_del‘),
                       url(r‘^apply/rule_list/$‘, ‘app_rule_list‘, name=‘app_rule_list‘),
                       url(r‘^apply/rule_detail/$‘, ‘app_rule_detail‘, name=‘app_rule_detail‘),
                       )

四、授权添加接口及邮件发送功能

def perm_rule_add(assets_obj, asset_groups_obj, users_obj,
                  user_groups_obj, roles_obj, rule_name, rule_comment):
    """
    add rule page
    添加授权API,参数为object 如:users_obj = [User.objects.get(id=user_id) for user_id in users_select]
    """
    try:
        rule = PermRule(name=rule_name, comment=rule_comment)
        rule.save()
        rule.user = users_obj
        rule.user_group = user_groups_obj
        rule.asset = assets_obj
        rule.asset_group = asset_groups_obj
        rule.role = roles_obj
        rule.save()

        msg = u"添加授权规则:%s" % rule.name
        res = {‘result‘: True, ‘Msg‘: msg}
        return json.dumps(res)
    except ServerError, e:
        error = e
        logger.info(error)
        res = {‘result‘: False, ‘Msg‘: error}
        return json.dumps(res)

def app_send_mail(user, app, check_res, mail_type, host_url):
    """
    check app send mail
    发送审批邮件
    mail_type == "user" or "checker"
    """
    if mail_type == "user":
        mail_title = u‘堡垒机权限申请审批结果‘
        url = host_url+reverse(‘follow_app‘)
        mail_msg = u"""
        Hi, %s
            您的堡垒机权限申请: %s,
            %s,
            请登录系统查看:
            %s
        """ % (user.name, app.app_name, check_res, url)
    else:
        mail_title = u‘堡垒机权限申请审批‘
        url = host_url+reverse(‘check_app‘)
        mail_msg = u"""
        Hi, %s
            堡垒机权限申请: %s,
            请您登录系统审批:
            %s
        """ % (user.name, app.app_name, url)
    send_mail(mail_title, mail_msg, MAIL_FROM, [user.email], fail_silently=False)

五、主要功能部分代码

时间: 2024-10-20 14:23:13

二次开发Jumpserver,增加权限申请模块实现用户组归属,服务器及组授权,系统用户授权申请处理的相关文章

【二次开发jumpserver】——整合jumpserver与zabbix推送主机功能

jasset/forms.py "ip", "other_ip", "hostname", "port", "group", "username", "password", "use_default_auth", "idc", "mac", "remote_ip", "brand

二次开发Jumpserver实现主备,实现user&key,系统用户&key的同步

这是jumpserver二次开发系列第三篇 ,前两篇是关于用户认证模块的,调用现有的认证接口认证并获取用户信息. 此篇是关于如何实现双机热备,要实现互备,就要确保用户及系统用户信息不只同步到另外一台数据库,还需要把用户及系统用户的秘钥信息同步到另外一台服务器,并创建用户,当然删除也需要同步. ps:在原代码基础上添加的代码,在每个代码框内用绿色背景斜体标记,否则为整体添加. 一.修改setting,增加server_type配置,从jumpserver.conf配置文件读取主备服务器信息. #

微信二次开发准备工作

1.了解微信是什么? 2.微信能做什么? 3.微信有什么? 4.微信为什么要做二次开发? 前面三个问题,我就不多说了,我相信大部分人都知道 对于第四个问题呢,在很多应用上,有很多的需求在微信上不能达到预期效果或者需要扩展一些什么需要等等,这个时候则需要做二次开发,当然这二次开发是需要一些成本的,如一些服务器资源,很多开发人员都看过腾信的api,或多或少都有些了解吧 准备工作 1.申请域名或者独立服务器,或者外网映射 2.申请微信号,开发者号(服务号,订阅号,企业号) 3.开发工具eclipse或

PC端 Spark 二次开发 自动接收好友请求并同意

本次Spark二次开发是为了客服模块的开发, 能让用户一旦点击该客服则直接自动添加好友,而客服放则需自动添加好友,不同弹出对话框进行同意,这方便的广大客服. 现在废话不多说,直接上代码. package org.jivesoftware.spark.ui; import java.util.ArrayList; import org.jivesoftware.spark.util.log.Log; import org.jivesoftware.spark.util.ModelUtil; imp

渠道代理商授权系统如何开发

渠道代理商授权系统开发公司可找张董:131-2933-4618电微,渠道代理商授权系统开发.渠道代理商授权系统系统定制开发.众所周知,微商的发展离不开代理商,常见的代理体系是:厂家–>总代–>省代–>市代–>天使代理,随着微商品牌越做越大,以及代理商团队的壮大,销量的暴涨,微商企业开始面临各种各样的问题,譬如:市场假货多.库存管理难.代理商管理难.代理商窜货.代理商乱价.代理商越级等,这些现象都严重影响着微商品牌的可持续发展. 一.除了做渠道代理商授权系统,我们还可以做啥: 1.渠

linux笔记二:系统用户管理

用户类别: 管理员组: 普通组: 系统组: 一般组 用户组类别: 私有组:创建用户,如果没有指定所属组,则默认创建同名的组 基本组:用户的默认组 附加组,额外组:默认组以为的其他组 用户: /etc/passwd account: passwd: UID: GID: comment: HOME DIR: SHELL: /etc/shadow account: encrypted password: 用户管理: useradd [option] USERNAME -u UID -g GID(基本组

重新开发Jumpserver用户认证模块,调用独立认证接口(一)

一.概述 Jumpserver用的是python的django框架开发,所以主要完成两个事情: 1.开发自己的认证后台 一个认证后台就是要实现如下两个方法的类: get_user(id) 和 authenticate(**credentials) . 方法 get_user 返回一个 User 对象,参数 id 可以是用户名或者数据库ID.  方法authenticate(**credentials)可以使用密码.token或者已有的认证接口实现身份认证,返回User对象.如果你的认证后台的Us

微控工具xp模块-开发版[微信(wechat)二次开发模块]

http://repo.xposed.info/module/com.easy.wtool 微控工具xp模块-开发版[微信(wechat)二次开发模块] 基于xposed框架的微信二次开发模块,方便开发者用微信做一些扩展功能(如微信群发.多群直播等...) 目前支持功能: 发文本消息 发图片消息 发语音消息 发视频消息 获取微信好友列表 群列表 支持群发消息 支持消息转发(目前支持文本.图片.语音.视频.图文消息转发) 群管理功能(建群.加人.踢人.设置公告.改群名.退群.解散群) [注:本模块

PHPCMS V9 模块开发 二次开发实例 留言本

鄙人实现了PHPCMS V9 产品开发权威指南(2011官方最新版).doc中的留言板实例,并加上模块安装和卸载功能, 程序可以运行,但只实现基本功能,目的是想让和我一样徘徊在PHPCMS门口不知道从哪儿进门的初学者走一下流程,欢迎指正! 对于像我这样的入门者希望先把上面这个文档仔细读一遍再往下看! 声明:我用的是GBK版本. 二次开发流程 创建数据库和数据库表(无数据库操作可略过) 创建数据模型文件 创建模块目录 开发控制器和模板 install和uninstall模块 一.创建数据库表 具体