本文讲解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就会对用户的行为进行记录。
对程序员来说,真的,敲代码简单多了。写好、上传,运行用户就创建好了。但有一个问题,这样创建的用户是保存在本地存储中的,系统必须重启才能加载该用户和相应的授权。
注:目前也为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