页面树结构
转至元数据结尾
转至元数据起始


在业务系统中,经常需要通过用户的所属机构控制用户所能查看到的数据。

下面我们演示如何实现数据权限,控制不同机构用户只能查看所属机构及其所有子机构的数据。

机构架构如下:


  • 当总部用户查看报表时,能够查看到所有机构的数据
  • 当华南业务员查看报表时,能够查看到"华南"机构及其所有下级机构的数据。
  • 当华北业务员查看报表时,能够查看到"华北"机构及其所有下级机构的数据。

前提

数据库中存在机构表,包含机构编号字段、机构名称字段和上级机构编号字段。如org表;其中c_id为机构编号,c_name为机构名称,c_parentid字段为上级机构编号。

实现步骤

使用下拉树参数和用户所属默认组名称相结合,控制用户登录之后,下拉树参数的根节点的值为用户所属机构的编号,则用户进行参数切换,只能够选择其所属机构或者下级机构,不能够选择上级机构或者其他机构。

通过参数过滤数据实现用户只能查看其所属机构及下级机构的数据。

1. 在用户管理中建立用户组,如下:包括总部、华北、华南三个用户组。

2. 设置"总部管理员"默认组为"总部","华南业务员"默认组为"华南"、"华北业务员"默认组为"华北"。



3. 在“系统导航栏”选择 公共设置,点击 参数定义,新建参数,数据格式选择"字符串",控件类型选择下拉树。


4. 备选值、默认值和根节点设置如下:

备选值、根节点和默认值中,使用系统函数“CurrentUserDefaultDepartmentName”与“c_name”字段进行过滤,则当用户选择参数时根节点为对应的机构编号。

  • 备选值:
select
    c_id as c_id, c_name as c_name, c_parentid as c_parentid
from org
where
    c_name = CurrentUserDefaultDepartmentName() /*获取当前用户所属机构名称。实际是获取下拉树的第一层,如使用华南用户登录,则可以查看“华南用户”这一条数据*/
    or (							
	/*获取父节点,父节点等于当前用户ID的数据,实际是获取下拉数的第二层。如使用华南用户登录,则父节点为“华南”的就是华南一区、二区了,可以看到华南一区、华南二区的数据*/
        c_parentid = (
            select c_id from org where c_name = CurrentUserDefaultDepartmentName() 
		)
    )
	/*获取以华南一区、二区为父节点的数据, 即获取到用户组第三层的数据*/
    or (
		/*父节点等于当前用户ID的数据,比如华南登录,父节点是华南的数据,即华南一区、二区这里就会获得华南一区、二区的数据*/
		/*获取华南一区、二区的节点ID*/
        c_parentid in (
            select c_id from org
            where
                (
					/*再获取华南一区、二区的节点ID*/
                    c_parentid = (
                        select c_id from org where c_name = CurrentUserDefaultDepartmentName()
                    )
                )
        )
    )



  • 默认值:
select c_id as c_id, c_name as c_name,c_parentid as c_parentid from org where c_name = CurrentUserDefaultDepartmentName()



  • 根节点:
select c_id as c_id, c_name as c_name from org where c_name = CurrentUserDefaultDepartmentName()



5. 在参数定义中勾选"允许多选"。


6. 参数真实值,实际值设置如下:


7. 在数据集中使用上述步骤中建立的参数,如:


8. 建立报表。使用不同用户组用户登录,效果如下:

  • 总部管理员:
  • 华南业务员:
  • 华北业务员:
  • 无标签