用户管理

阅读(9994) 标签: 用户管理,

用户是应用的访问者,同一个应用不同的用户看到的报表信息是不同的,比如销售经理可以查看所有销售员的销售信息,而销售员则只能查看他本人的销售信息,所以就有必要对访问应用的用户进行管理。

用户管理可以新增访问应用的用户,可以给用户设置对应的机构,也可以给用户设置DQL宏和报表参数来控制用户对报表的访问权限。机构与通常所说的用户组相同,可将访问应用的用户信息,划分到不同的机构组。建立机构组的好处是可以为组里的所有用户统一定义访问报表的权限设立统一的参数初始值,以控制他们访问报表时的数据。

创建机构 / 用户

创建机构:

添加机构时需以系统自带的超级管理员登录,超级管理员的用户名/密码为admin/a000000

添加机构,编辑机构名为“副总裁”,设置基础权限、数据源权限、报表管理权限以及节点显示权限。

 

基础权限——设置该机构下的用户登录系统后,是否可以显示报表管理、查询分析管理按钮。

上图中对副总裁机构的基础权限做了控制,勾选了“显示查询分析管理按钮”。使用副总裁机构下的用户登录报表中心,查询分析管理按钮可以显示,报表管理按钮不显示。

 

数据源权限——设置远程服务时对数据源的访问权限。

上图中对副总裁机构的数据源权限做了控制,勾选“dqldemo”数据源。在报表设计器中通过远程服务访问报表中心,使用副总裁机构下的用户登录后,可以在数据源窗口看到dqldemo数据源。

 

报表管理权限——既能控制报表管理中目录的使用,还能控制远程服务对报表中心目录的访问。读用来控制对文件的读取和下载权限;写用来控制对文件的编辑权限;删用来控制对文件的删除权限。

报表文件目录设置的权限对除了.dfx之外的其他报表相关文件(rpxrpgxlsxlsxtxt等)都有控制作用。

集算器文件目录设置的权限只对.dfx文件有控制作用。

上图中对副总裁机构的报表管理权限做了控制,将报表文件目录中“00Dashboard”目录的可用状态改为on,勾选了读写复选框。在报表设计器中通过远程服务访问报表中心,使用副总裁机构下的用户登录后,在左侧节点中看到有读权限的“00Dashboard”目录列出,该用户可以对这个目录进行读和写操作。

远程服务的使用可参考远程上传报表小节。

报表/集算器文件目录可通过按钮添加/删除目录,目录名称也可以随意定义。下图所示的这些默认已有的目录是报表中心用来存放demo示例的目录。

 

节点显示权限——设置该机构下的用户可以查看的报表显示节点。

上图中对副总裁机构的节点显示权限做了控制,勾选了“Dashboard”分类夹下的3个报表节点。使用副总裁机构下的用户登录报表中心,在左侧节点树中可以看到Dashboard分类夹下的3个报表节点,可以查看预览报表结果。

注:只需要对叶子节点设置节点显示权限。

选中一个叶子节点,例如“手机销售分析”,即可以设置该机构下的所有人有访问权限,也可以设置该机构下的特定用户有访问权限。

此时销售代表机构下的所有用户(张颖、李芳)都对手机销售分析节点有访问权限。

 

此时销售代表机构下的用户,只有张颖对手机销售分析节点有访问权限。

 

设置:

使用机构名称作为参数:勾选后,管理员为机构设置一个参数并跟随机构,若报表中使用到此参数,预览报表时则会自动匹配此参数的机构名称。

例如:

报表中设置参数grp

勾选【使用机构名称作为参数】并设置参数名称为grp

使用不同机构的用户登录,查看设置参数的报表,显示的参数不同

 

使用用户名作为参数:勾选后,管理员为用户设置一个参数并跟随用户,若报表中使用到此参数,预览报表时则会自动匹配此参数的用户名。

例如:

报表中设置参数un

勾选【使用用户名作为参数】并设置参数名称为un

使用不同的用户登录,查看设置参数的报表,显示的参数不同

 

创建用户:

通过上面创建机构的介绍我们已经了解如何新建角色和分配角色权限。那么,接下来我们学习如何管理用户并且为用户分配权限。

在“用户管理”界面,点击【添加】按钮,创建新用户。

 

(1) 新用户默认初始密码为a000000

(2) 产品缺省有一个普通用户raq_visitor,该用户不可删除。为方便演示,通过报表设计器工具栏按钮访问报表中心时,会默认以raq_visitor用户登录,无需手动登录。

设置:

启用登录验证码勾选后,用户登录时需输入验证码。

密码必须包含特殊字符勾选后,修改管理员/个人密码时,新密码需由6-10位数字、大小写字母和特殊符号组合成,特殊符号包括:!@#$%^&*,.等字符。不勾选时,新密码需由6-10位数字字母组合成。

 

不允许其他端点再次登录相同账号:默认同一个账号可在多个端点同时登录。勾选此选项时,一个账户只能在一个端点登录。此功能仅针对除超级管理员、管理员和访客外的其他普通用户。

修改密码

添加管理员用户和普通用户后,会使用缺省密码a000000,用户登录后可通过个人密码菜单随意修改个人密码。

假设某用户忘记了自己的个人密码,有以下两种方式重置密码:

1、可通过超级管理员重置该用户的密码为初始密码。超级管理员拥有修改超级管理员密码和强制重置其他用户密码的权限。

2、可通过登录页中的【密码重置】进行重置密码,重置后的密码为初始密码a000000。(注:(1)重置密码需设置【任务】-【发件邮箱】,以及重置用户需要填写正确的收件邮箱;(2)超级管理员或管理员也可以通过这种方式重置密码。)

用户个人信息

仅普通用户有用户个人信息管理功能。

普通用户可通过用户个人信息添加和修改个人的邮箱和电话,解除绑定的微信号。

锁定用户

锁定用户是指在规定时间内,为防止非法用户尝试高频登录(某个用户在某个时间内频繁登录n次),保护账户的安全而将此账户进行锁定,使其在一定时间内不能再次使用此账户。

锁定时长代表失败后的锁定时间,单位为分钟。

间隔时间:设置此功能检查的窗口期,也就是n分钟之内输入错m次,就会锁定,这里n代表间隔时间,单位为分钟。

间隔时间内登录失败次数:设置间隔时间内的登录失败次数。

 

数据库存储用户信息

报表中心默认会将用户信息存在xml文件中,为了方便客户对用户信息的引入与管理,程序增加了从数据库读取用户信息的方法。客户可通过自定义类继承com.raqsoft.center.AbstractDefaultUserManager抽象类,自主实现该功能,方便在任意数据库来源储存用户信息。

配置方法如下:点击 设置 菜单添加数据库用户管理信息:

 

用户管理类全限定名实现了com.raqsoft.center.AbstractDefaultUserManager抽象类的类路径

数据库工厂或命名空间:数据源名称,该数据源需在WEB-INF/raqsoftConfig.xml中添加

数据库用户表名:配置存储用户信息的表

数据库用户表从表名:配置存储用户信息对应DQL宏的表

 

举例:

下面我们以mysql数据源为例,自定义一个com.raqsoft.center.DBUserManager类,该类实现了com.raqsoft.center.AbstractDefaultUserManager抽象类。作用就是通过规定一个数据源、提供两个数据表名(有规定构造的),并让应用加载此类为用户管理类,实现用户在数据库存取。

为方便用户参考,程序默认将com.raqsoft.center.DBUserManager示例类存储在[安装根目录]\report\doc\zh目录下的center.zip中。

mysql数据库中执行如下脚本:

t_rq_usert_rq_userdqlmacro表名称的命名可以自定义,在配置页面同步设置即可,表字段结构不可修改,需与下面表字段结构一致。

CREATE TABLE `t_rq_user` (

`userId` int(11) NOT NULL AUTO_INCREMENT,

`userName` varchar(20) NOT NULL,

`roleId` varchar(20) NOT NULL,

`password` varchar(50) NOT NULL,

`phone` varchar(20) DEFAULT NULL,

`email` varchar(20) DEFAULT NULL,

`dqlMacro` varchar(200) DEFAULT NULL,

`reportParams` varchar(200) DEFAULT NULL,

`wxid` varchar(50) DEFAULT NULL,

`wxnickname` varchar(20) DEFAULT NULL,

`secret` varchar(10) DEFAULT NULL,

PRIMARY KEY (`userId`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;

INSERT INTO `t_rq_user` VALUES (1,'王伟','2','47DA9D7366792CCA5C5B8EC1C431F49D','13439693532','460778537@qq.com',NULL,NULL,NULL,NULL,'');

CREATE TABLE `t_rq_userdqlmacro` (

`userId` varchar(20) DEFAULT NULL,

`conditionId` varchar(50) DEFAULT NULL,

`dataSource` varchar(20) DEFAULT NULL,

`params` varchar(200) DEFAULT NULL,

`filters` varchar(200) DEFAULT NULL,

`vsb` varchar(100) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

 

如上述脚本所示,在mysqlt_rq_user表中插入了用户王伟的信息,通过下图配置,管理员登录就会在用户管理菜单看到王伟用户。可对他进行与初始报表中心一样的用户编辑操作。王伟用户可以正常使用报表中心,而报表中心默认存储用户信息的xml文件中的用户信息都会失效(不删除,但是是失效的)。

注意:

设置数据库用户管理后,使用数据库中已有的用户登录时,登录密码必须按照数据库中定义的密码登录。

单点登录

单点登录是目前比较流行的企业业务整合的解决方案之一。在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

比如小张在公司需要登录应用1和应用2,打开了应用1的登录界面,完成登录;之后再打开应用2,应用2通过令牌系统得知小张已经登录过了,则不用在输入口令,可直接进入应用内。这里令牌系统是客户公司内部的令牌系统。

为方便客户更好的体验报表中心,我们为报表中心提供了接入令牌系统的能力,这个单点登录设置就是用来把报表中心接入到客户单点登录令牌系统。

单点登录的实现方式有不只一种,我们针对最常见的方法做了接口。为客户提供了一种能够接入到支持http协议的远程令牌中心的接口,并在本地将令牌存入cookie,实现按域共享登录状态。

上图示例中的校验urlhttp://127.0.0.1:8080/token/testsso?action=1&token={0};登录urlhttp://127.0.0.1:8080/token/testsso?action=0&username={0}&password={1};登出urlhttp://127.0.0.1:8080/token/testsso?action=2&username={0}&token={1}

url{0}{1}…代表占位符,会被报表中心替换成对应的值。比如登录url使用{0}{1},会被替换成输入的用户名和密码,需要几个参数,这里我们就给了几个占位符。使用时要严格按规则填写。

 

启用:是否启动单点登录功能;

校验url每个用户登录后,都会生成一个token标记,通过校验urltoken传递给令牌中心,验证通过后则无需输入用户名密码,直接登录,同时令牌中心会返回用户名给报表中心应用;

登录url把实际输入的用户名和密码通过占位符的方式传递给令牌中心,登录成功令牌中心会返回一个token存入当前登录页面的cookie中;

登出url退出应用时使用,用于关闭令牌中心的登录状态。此时并不会导致正在使用的应用登出。只是当应用再需要验证时,去令牌中心取不到token了,需要用户名密码重新登录;

cookie名称:可任意指定,用于为当前网页定义名字,方便报表中心及其他应用的认识;

cookie生效路径:域名后跟的路径。同路径命名下cookie才能互通使用,/代表应用根目录;

coolie作用域cookie有作用域设置,也就是不能跨域使用。比如设置域为testsso.com,那么这个cookie仅可以在访问***.testsso.com相互传递过去。

批量导入用户

报表中心默认将用户信息存储在WEB-INF/reportCenter.xml中,很多时候用户不仅想在报表中心后台管理添加用户,还想批量将存储在外部文件或数据库中的用户信息导入到报表中心。为满足这种需求,报表中心提供了批量导入的方法。

需要调用报表中心提供的com.raqsoft.center.util.UserImporter类的importUsers方法

方法介绍:

importUsers

  法:  public void importUsers(List<User> importUsers, String defaultPassword, boolean idAutoIncrease, String roleRulesFilePath, String configFilePath)
 

参数说明:  importUsers - 需要引入的用户对象集合

  defaultPassword - 引入用户默认密码

  idAutoIncrease -  id自增,若为false则使用用户对象中的id。代码中id不查重,尽量使用自增。用户名查重,会跳过重复。

  roleRulesFilePath - 角色名称对应规则。此参数为一个txt文件的全路径,在该文件中应该设置当前引入用户对象的roleId属性和报表中心角色名称的对应关系。

  configFilePath - 需要修改的报表中心配置文件的全路径

 
功能说明:  修改WEB-INF/reportCenter.xml文件,引入用户
 
Returns   

 

代码示例

为方便用户参考,程序默认将com.raqsoft.center.util.UserImporterExample示例类存储在[安装根目录]\report\doc\zh目录下的center.zip中。

package com.raqsoft.center.util;

... ...

import com.raqsoft.center.util.UserImporter;

 

public class UserImporterExample {

//通过api批量导入用户

//api用于将用户导入到报表中心的xml中存档

public static void main(String[] args) throws Exception {

 

String configFilePath = " C:\\Users\\runqian\\Desktop\\reportCenter.xml ";

 

//导入的用户需要遵守报表中心的用户设计,以下User对象都是指com.raqsoft.center.entity.User

UserImporter importer = new UserImporter();

 

//importUsers User对象集合 java代码中自定义  以下举例

List<User> importUsers = new ArrayList<User>();

 

//以下例子是给定值,实际可以从某库中取出自己要导入的用户群体和角色

//new user 参数对应  id  name  roleId password

//示例中用户编号为自增id,并给定password填为null,密码为null时,程序默认用a000000

//roleId原本代表角色id,这里导入我们借用这个属性作为来源角色的角色名

//如果报表中心中没有这样的角色名,可以自动生成,或根据roleRulesFilePath映射成已有的角色

//xml中没有添加的角色时,会新建

importUsers.add(new User(null, "张三", "初级工程师", null));

... ...

//xml中没有这三个角色,但是rule文件中有对应关系,会映射

importUsers.add(new User(null, "王五", "二级销售", null));

... ...

//xml中有这个角色时,直接匹配

importUsers.add(new User(null, "小刘", "销售经理", null));

//新导入用户的默认密码,如果设置,导入用户统一为此密码

String defaultPassword = "a000000";

//自增id

boolean idAutoIncrease = true;

//客户设定的role

String roleRulesFilePath = "C:\\Users\\runqian\\Desktop\\rule.txt";

 

importer.importUsers(importUsers, defaultPassword, idAutoIncrease, roleRulesFilePath, configFilePath);

}

}