docker版jxTMS使用指南:新建用户并授权

本文讲解4.4版jxTMS中如何新建用户并授权,整个系列的文章请查看:[docker版jxTMS使用指南:docker版jxTMS使用指南:4.4版升级内容

docker版本的使用,请查看:docker版jxTMS使用指南

4.0版jxTMS的说明,请查看:4.0版升级内容

4.2版jxTMS的说明,请查看:4.2版升级内容

我们上篇文章中增加了新的操作,但如果直接用之前的用户进行访问,显然是不可能成功的。

权限管理在【python服务之权限管理】一文中已经做过讲解,所以本文就举例如何来操作。

新增用户并授权的说明可以参考【addRight.py】文件,我在其中也做了详细的说明,就简单贴下代码吧:

from jx.jxLocalStore import localStore
localStore.load()#增加用户
lm = localStore.get('allUser')
if lm is None:lm = {}
u = {}
#用户名:demoUser01
lm['demoUser01'] = u
u['alias'] = 'demoUser01'
u['name'] = 'demoUser01'
#允许强制重新登录,jxTMS只允许单点登录,则当该用户已经登录而再次登录时:
#   True:允许重新登录,之前的会话被抛弃
#   False:不允许重新登录
u['permitForceRelogin'] = True
u['pwd'] = 'demo-123456'
#指派角色为:webServer
u['roles'] = ["webServer"]
localStore.put('allUser',lm)#定义资源hbc01【该资源是上一版中加入的测试站点】
lm = localStore.get('allResource')
if lm is None:lm = {}
res = {}
lm['hbc01'] = res
#指派给资源组:web_getSiteData
res['group'] = 'web_getSiteData'
res['id'] = 'hbc01'
res['name'] = 'hbc01'
res['type'] = 'resource'
localStore.put('allResource',lm)#定义授权【web_getSiteData-getSiteData-webServer】
lm = localStore.get('allRight')
if lm is None:lm = {}
right = {}
#本授权是关于资源组web_getSiteData的授权
lm['web_getSiteData'] = right
#默认权限是拒绝
right['defaultRight'] = False
right['resID'] = 'web_getSiteData'
right['resType'] = 'group'
rl = []
right['rights'] = rl
rs = {}
rl.append(rs)
#授予角色webServer
rs['active'] = True
rs['target'] = 'webServer'
rs['targetType'] = 'role'
ol = []
#可执行的操作:getSiteData
#getSiteData操作在本目录的op_getSiteData.py中定义并注册
rs['opList'] = ol
ol.append('getSiteData')localStore.put('allRight',lm)localStore.save()

创建了用户。我们可以测试一下,先在一个ssh终端中启动jxTMS:

cd /home/tms/python
python3 main.py

等上一两分钟后【使用了Test模式,等待其拉取到模拟数据】,然后开一个新的ssh终端,执行:

cd /home/tms/python
python3 testWeb.py

可以看到该终端中打印出:

({'VoltageA': 217.4, 'VoltageB': 225.5, 'VoltageC': 221.5, 'DG1_VoltageAB': 220.0, 'SOC1': 215.20000000000002, 'timestamp': None}, 200, None)

即证明用户创建并授权成功了。此时,在启动系统的终端中可以看到:

{"level":"info","time":"2023-07-06T16:18:48.790+0800","linenum":"utils/jxLog.go:82","msg":"用户[demoUser01/demoUser01] 登录:ok"}
{"level":"info","time":"2023-07-06T16:18:48.792+0800","linenum":"utils/jxLog.go:82","msg":"用户[demoUser01/demoUser01]请求对[hbc01]执行操作[getSiteData]:允许"}
{"level":"info","time":"2023-07-06T16:18:48.793+0800","linenum":"utils/jxLog.go:82","msg":"用户[demoUser01/demoUser01]请求对[hbc01]执行操作[getSiteData]:允许"}
{"level":"info","time":"2023-07-06T16:18:48.794+0800","linenum":"utils/jxLog.go:82","msg":"用户[demoUser01/demoUser01] logout"}

这是由于testWeb在用户登录时指示了打开用户跟踪,jxTMS就会对用户的行为进行记录。

通过web端来创建并授权用户

对程序员来说,真的,敲代码简单多了。写好、上传,运行用户就创建好了。但有一个问题,这样创建的用户是保存在本地存储中的,系统必须重启才能加载该用户和相应的授权。

注:目前也为jxTMS的python侧增加了直接从数据库中读取信息的能力,但暂时仍以本地存储为主

这咋行呢?!不重启就需要通过web界面来操作,以manager用户登入后,执行:

1、【安全管理->添加用户】
2、【安全管理->用户查询】,查看刚创建或希望调整的用户a 设置用户密码b 映射到角色c 用户配置下发
3、【安全管理->添加资源组】
4、【安全管理->添加资源】
5、【安全管理->资源查询】,查看刚创建的资源a 添加到资源组
6、【安全管理->资源组查询】,查看相应的资源组a 添加操作权限【授权对象是用户所映射的角色】b 操作权限配置下发

大家试着操作一下吧,当然,只是新用户、新资源才会如此繁琐,都配置好的情况下,新用户完成1、2两步就自动具备了所映射的角色的所有权限;新资源完成4、5【当然也需要下发配置】两步就自动能被拥有所属资源组操作权限的用户访问了【需要知道新资源的资源ID】。

需要说明的,要执行此项操作,在docker版本中要做如下的动作:

1、修改python服务的启动模式

cd /home/tms/python
vi main.py
#将最后一行:ms.start(alone=True)
#括号中的内容删除,改为:
ms.start()

这是由于笔者需要频繁的测试python代码,不想每次都启动jxTMS整个平台,所以就以alone模式来启动jxTMS的python服务,即不向jxTMS平台注册。

但现在需要通过jxTMS平台来管理python服务,所以必须取消alone模式。

2、启动tms服务

systemctl start tms

tms服务现在默认是不随docker启动而启动的,需要手动启动。

访问限制

上面讲了可以使用testWeb.py来测试REST服务,大家可以多运行几遍,等到第6次运行的时候看看会发生什么【去除其它日志信息】:

webClient[cwzUser01]--access[getSiteData]失败:用户[u123/cwzUser01]请求访问[getSiteData:xzm]失败:[cwzUser01]访问频率超过预期

这是由于jxTMS开启了资源访问限制:默认情况下,一个用户1分钟内只允许访问10次。

参考资料:

jxTMS设计思想

jxTMS编程手册

下面的系列文章讲述了如何用jxTMS开发一个实用的业务功能:

如何用jxTMS开发一个功能

下面的系列文章讲述了jxTMS的一些基本开发能力:

jxTMS的HelloWorld

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/7982.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python实现逻辑回归-清风数学建模-二分类水果数据

所用数据 👉👉👉二分类水果数据 1.数据预处理 可以看到有4个特征,2种分类结果,最后4个没有分类结果的数据是拿来预测的 # 1. 数据预处理 import pandas as pd df pd.read_excel(oridata/二分类水果数据.xlsx,use…

开源大模型LLaMA 2会扮演类似Android的角色么?

在AI大模型没有商业模式?等文章中,我多次表达过这样一个观点:不要把大模型的未来应用方式比喻成公有云,大模型最终会是云端操作系统的核心(新通用计算平台),而它的落地形式会很像过去的沃森&…

【C++】开源:Linux端ALSA音频处理库

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍Linux端ALSA音频处理库。 无专精则不能成,无涉猎则不能通。。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下&#xff0c…

Python增删改查小练习

目录 1. List操作-增加 2. List操作-查询 3. List操作-修改 4. List操作-删除 资料获取方法 1. List操作-增加 List Append(“xx”) 插入到列表尾部 Insert(x,xx) 在指定的位置插入 Extend 将列表的元素分开,插入到之前列表的尾部 小练习: 把一个字符串”abcdefg…

ssh打开远程vscode

如果想要远程打开其他终端的vscode,首先要知道远程终端的ip地址和用户名称以及用户密码 1、打开本地vscode 2、点击左下角蓝色区域 3、页面上部出现如下图,点击ssh,我这里已经连接,所以是connect to host 4、选择Add New SSH Host…

线程池几个核心参数说明

线程池几个核心参数 corePoolSize:核心线程数量大小。maximumPoolSize:线程池最大容纳线程数。keepAliveTime:线程空闲后的存活时长。TimeUnit:单位时间。BlockingQueue:缓存异步任务的队列。 ThreadFactory &#xff…

appium中toast识别

目录 一、什么是Toast? 二、环境前提 三、修改配置 四、安装驱动 五、常见报错及解决方案 1、cnpm 不识别,提示不是内部或外部命令 2、npm 也不识别 3、报错 六、代码节选 一、什么是Toast? Android中的Toast是一种简易的消息提示框…

比selenium体验更好的ui自动化测试工具: cypress介绍

话说 Cypress is a next generation front end testing tool built for the modern web. And Cypress can test anything that runs in a browser.Cypress consists of a free, open source, locally installed Test Runner and a Dashboard Service for recording your tests.…

AutoSAR系列讲解(实践篇)9.1-协议数据单元PDU

本章主要是讲解通信(不包括诊断和标定的纯通信),同样是主要以CAN来讲解。由于通信大家其实用的基本上是其最基础的功能,所以本章的实验主要就是教大家如何配置基础通信,但是高级一点的功能,博主也会在前面这几节给大家讲到,用不到的同学仅作了解就行。同样,忘了通信是怎…

day44-Spring_AOP

0目录 1.2.3 1.Spring_AOP 实体类: Mapper接口: Service和实现类: 测试1: 运行后: 测试2:无此型号时 测试3:库存不足时 解决方案1:事务声明管理器 测试&#xff1a…

Grub2基础上添加Windows引导和临时启动Windows

grub2临时启动Windows 在引导列表页按c进入Grub2终端 。 insmod part_gpt set root(hd0, 1) chainloader /efi/Microsoft/Boot/bootmgfw.efi bootinsmod part_gpt 导入模块,让grub可以看到gpt格式的硬盘(这个有没有必要我也不清楚,但执行…

WPF实战学习笔记06-设置待办事项界面

设置待办事项界面 创建待办待办事项集合并初始化 TodoViewModel: using Mytodo.Common.Models; using Prism.Commands; using Prism.Mvvm; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using Sy…

RocketMQ主从集群broker无法启动,日志报错

使用vmWare安装的centOS7.9虚拟机,RocketMQ5.1.3 在rocketMQ的bin目录里使用相对路径的方式启动broker,jps查询显示没有启动,日志报错如下 排查配置文件没有问题,nameServer也已经正常启动 更换绝对路径,启动broker&…

建造者设计模式go实现尝试

文章目录 前言代码结果总结 前言 本文章尝试使用go实现“建造者”。 代码 package mainimport ("fmt" )// 产品1。可以有不同的毫无相关的产品,这里只举一个 type Product1 struct {parts []string }// 产品1逻辑。打印组成产品的部分 func (p *Product…

MySQL之函数、视图、存储过程

MySQL视图、函数与存储过程 1. 函数 1.1 语法 -- 函数是需要有返回值的,只能返回一个值 CREATE FUNCTION funcation_name (param_name data_type [, param_name2 data_type]) RETURNS return_data_type DETERMINISTIC -- 可选项,用于执行函数对于相同入参&#x…

[ELK使用篇]:SpringCloud整合ELK服务

文章目录 一:前置准备-(参考之前博客):1.1:准备Elasticsearch和Kibana环境:1.1.1:地址:[https://blog.csdn.net/Abraxs/article/details/128517777](https://blog.csdn.net/Abraxs/article/details/1285177…

关于uni.createInnerAudioContext()的duration音频长度获取不到问题

关于uni.createInnerAudioContext()的duration音频长度获取不到问题 代码如下: onLoad() {let _this this//初始化语音播放对象this.audioObj uni.createInnerAudioContext();this.audioObj.src 音频链接;// 音频进入可以播放状态,但不保证后面可以流…

MySQL explain详解

文章目录 0 环境准备1 explain 之 id2 explain 之 select_type3 explain 之 table4 explain 之 type5 explain 之 key6 explain 之 rows7 explain 之 extra MySQL 的 EXPLAIN 是一个用于查询优化的关键字。它用于分析和评估查询语句的执行计划,帮助开发者理解查询语…

gerrit +git + windows 配置常见问题总结

Git 正常安装 配置 ssh-keygen 后,git clone 服务器代码报错 clone 报错1 no matching key exchange method found. Their offer: **diffie-hellman-group1-sha1**clone 报错2 no matching host key type found. Their offer: ssh-rsa解决方案 用户目录文件下.s…

尚硅谷大数据项目《在线教育之采集系统》笔记001

视频地址:尚硅谷大数据项目《在线教育之采集系统》_哔哩哔哩_bilibili 目录 P004 P006 P007 P009 P010 P017 P025 P026 P027 P028 P030 P004 将数据以图形图表的方式展示出来! P006 数据埋点 所谓埋点就是在应用中特定的流程收集一些信息&…