权限


足易在线EXCEL报表系统的权限分为两类——报表权限和行权限。

报表权限中有五种权限——读取、修改、增加、删除和管理权限。

行权限又分为两种情况——电子表格型报表的行权限和数据库型报表的行权限,电子表格型报表的行权限有读取、修改和删除三种权限,数据库型报表的行权限有修改、删除和删改三种权限。

足易在线EXCEL用权限字符串保存权限,权限字符串由用户名+“:”+权限位构成,如“李明:11110”。权限位对应5种权限——读改增删管,第一位对应“读”(读取),第二位对应“改”(修改),第三位对应“增”(添加),第四位对应“删”(删除),第五位对应“管”(管理),权限位如果是“1”表明允许,“0”表明拒绝,“2”表明继承。如“李明:11110”表明“李明”有读取、修改、添加和删除的权限,但没有管理的权限。

报表权限的作用范围是整个报表,行权限的作用范围是所在行。但在优先级上,行权限总是优先于报表权限。比如电子表格型报表中,如果报表权限为“user:11111|李明:11000”,则“李明”对整个报表具有读取和修改的权限,但没有删除的权限;但如果在第10行上李明的行权限为“李明:10010”,即在此行上有读取和删除的权限,则“李明”对此行的权限为读取和删除,但不能修改,因为行权限在修改权限为“0”即拒绝。但此行权限只在第10行上起作用,而对于其它行,只要没有行权限冲突,“李明”都拥有读取和修改的权限,因为报表的权限的作用范围是整个报表。

在上例中,想要让“李明”拥有对第10行的读取、修改和删除的权限,则行权限可以设为“李明:11010”,也可以设为“李明:12010”。“李明:11010”因为修改位为“1”表明允许从而允许修改;“李明:12010”因为修改位为“2”,表明继承报表权限,而报表权限为“user:11111|李明:11000”,允许李明修改,所以李明继承了报表的可修改权限从而可以修改;假如报表权限为“user:11111|李明:10000”不允许李明修改,则行权限继承报表权限也将不允许李明修改。使用继承权限可以使用户在某项权限上保持与报表权限一致而不受行权限影响。

数据库型报表的行权限有三种——修改、删除和删改,看上去不像电子表格型报表的行权限那么清晰,但只要将数据库型报表行权限的“修改”看成是“11222”(允许读取和修改,其它权限继承),“删除”看成是“12212”(允许读取和删除,其它权限继承),“删改看成是“11212”(允许读取、修改和删除,其它权限继承),则数据库型报表的报表权限和行权限的关系与电子表格型报表也是一样的。例如“订单”的报表权限为“user:11111|李明:11000”,则李明对整个报表具有读取和修改的权限,但没有删除的权限;但如果报表的行权限被设为“删除”,而第10行的权限字段值为“李明”,则“李明”对此行的的行权限为“12212”,有读取和删除的权限,但因为修改位是“2”,“李明”在这一行将继承报表权限,所以“李明”对这一行仍有修改的权限。请记住,数据库型报表的行权限没有显性允许的部分全将继承报表权限

要掌握足易在线EXCEL的权限,除了理解报表权限与行权限的外部关系,还得理解权限本身的内部关系。

何为权限本身的内部关系?请看下面的例子。

例子:假如“李明”属于“销售组”和“财务组”,如果有这样的报表权限字符串“李明:10000|销售组:11000|财务组:10110|其它用户:10000”,那么“李明”拥有什么样的报表权限呢?

答案是“11110”。

例2: 如果报表权限字符串是“李明:11000|销售组:10110|财务组:10110|登录用户:10000”,那么“李明”又拥有什么样的报表权限呢?

答案是“10000”

要理解上述的结果,必须理解足易在线EXCEL的组。

组包括抽象组和具体组,抽象组是系统内部规定的组,它没有具体成员,如“登录用户”,指的是所有登录了系统的用户;而具体组是管理员定义的组,它有具体成员,比如管理员添加了一个“销售组”,并将“李明”、“张强”加入其中,“李明”“张强”就是“销售部”的具体成员,而“销售部”就是一个具体的组。

系统抽象组有四个——所有用户,登录用户,其它用户,匿名用户;所有用户包括登录用户和匿名用户;登录用户包括具体用户或组和其它用户;匿名用户为没有登录的用户。它们的关系如下图


从上图可以看到,系统的组共有三个层次,在范围上,上一个层次包括下一个层次;在权限上,上一个层次的权限将覆盖下一个层次的权限。

情形1: 如果存在“所有用户”,它的权限将覆盖所有的其它权限,例如权限字符串“李明:11110|销售组:11110|其它用户:11100|所有用户:11000”,在此权限字符串中,“所有用户”的权限为“11000”,即可读取和修改报表,如果用“李明”登录,虽然“李明”的权限为“11110”,但由于“所有用户”在范围上包括了“李明”,所以在权限上它将覆盖“李明”的权限,所以用“李明”登录,他的权限仍是“11000”;不仅如此,即使不登录,用户依然有“11000”的权限,因为不登录的用户为“匿名用户”,而“所有用户”包括了“匿名用户”。因为不管什么用户均属于“所有用户”,所以不管用什么用户登录或不登录,他的权限都为“11000”。由于“所有用户”包括所有用户的范围,所以在设置权限时要慎用“所有用户”这个抽象组。

情形2:如果存在“登录用户”,它的权限将覆盖“其它用户”和具体用户或组,例如权限字符串“李明:11110|销售组:11110|其它用户:11100|登录用户:11100”,在此权限字符串中,“登录用户”的权限为“11100”,即可读取、修改和添加报表,如果用“李明”登录,虽然“李明”的权限为“11110”,但由于“登录用户”在范围上包括了“李明”,所以在权限上它将覆盖“李明”的权限,所以用“李明”登录,他的权限仍是“11100”;不管以什么用户登录,它都在“登录用户”的范围内,所以它的权限都是“11100”,但如果不登录,用户将没有任何权限,因为不登录的用户为“匿名用户”,而“登录用户”不包括“匿名用户”,因此权限上也不会覆盖“匿名用户”。现在请回头看一下例2,您可以理解为什么“李明”的权限是“10000”了吧。由于“登录用户”包括所有登录用户的范围,所以在设置权限时要慎用“登录用户”这个抽象组。

情形3:具体用户和组属于同一层次,因此它们的权限关系非覆盖而是累加,如例1中,“李明”属于“销售组”和“财务组”,报表权限字符串为“李明:10000|销售组:11000|财务组:10110|其它用户:10000”,因为权限字符串中的用户和组都是在同一个层级上,不存在覆盖关系,而由“李明:10000”使得“李明”有报表权限“10000”、“李明”属于“销售组”,从而“李明”又拥有“销售组”的报表权限“11000”;“李明”又属于“财务组”,从而“李明”还拥有“财务组”的报表权限“10110”,这三个报表权限的累加结果是“11110”,所以“李明”拥有“11110”的报表权限。

这样计算出来的权限,称为综合权限,如情形1中“李明”的报表综合权限为“11000”;情形2中“李明”的报表综合权限为“11100”;如情形3中“李明”的报表综合权限为“11110”

对于行权限,如果同时存在抽象组、具体用户和组,其综合权限也同理计算。

当进行权限判断时,系统总是先算出报表综合权限,再算出行综合权限,最后算出执行权限。例如,报表权限为“李明:10000|销售组:11000|财务组:10110|其它用户:10000”,计算出来的报表综合权限为“11110”;第10行的行权限为“李明:11111|销售组:11110|其它用户:11100|登录用户:11000”,计算出来的行综合权限为“11000”,因为行权限优先于报表权限,所以最后的执行权限为“11000”

在计算报表综合权限时有一点例外,就是抽象组管理权限状态不影响具体用户和组的管理权限,如“所有用户:10000|李明:11111”,虽然“所有用户”的其它权限将覆盖“李明”的权限,但在“管理”权限上却覆盖不了,“李明”仍能管理报表。这样的设计是为了防止错误的权限设计导致授权用户无法修改报表改正错误。像“所有用户:10000|李明:11111”这样的权限设计是应该避免的,正确的应是“其它用户:10000|匿名用户:10000|李明:11111”(李明拥有所有权限,其它登录用户拥有读取权限,不登录的用户也拥有读取权限)。

权限的计算看起来很复杂,但在使用中只需记住两点就够了。

1、在报表权限上慎用“所有用户”和“登录用户”,一般使用具体用户和组+“其它用户”的组合完成报表权限设计。

2、如果权限中有“所有用户”,则不要再加其它任何用户;如果想加一个例外权限的用户,则用“用户:XXXXX|其它用户:XXXXX|匿名用户:XXXXX”,而不要用“用户:XXXXX|所有用户:XXXXX”。 如果有“登录用户”,则不要再加具体用户和组及“其它用户”;如果想加一个例外权限的用户,则用“用户:XXXXX|其它用户:XXXXX”,而不要用“用户:XXXXX|登录用户:XXXXX”。


电子表格型号报表的行权限模块说明

添加删除子模块如下图



此模块在教程3和教程4中已阐述,此处仅补充几点

1、红框1是权限添加范围,如果是选中“行权限”,则添加到行权限区,如果选中“列权限”,就添加到列权限区,如果选中“选区”,则添加在用鼠标选中的区域上。行权限区和列权限区位置见教程1。

2、列权限仅用于拒绝修改,读取和删除权限无效。列权限可用于保护某一列不被修改,有些报表的某些列可能只允许授权管理用户修改,而不希望被其它用户修改,就可以给此列加上“管理用户:XXXXX|其它用户:10000”的列权限进行保护。

3、红框2中的权限用户列表中,“预设权限”用于预设添加用户的默认权限,例如,将“预设权限”设为允许读,不允许改和删,则按“+”按钮添加任何用户时,这个用户的默认权限都是允许读,不允许改和删。特别是对于用户来自行列的权限只能用“预设权限”进行预设。

4、行权限的状态有三种,“√”表示允许,位值为“1”;“×”表示拒绝,位值为“0”;“=”表示继承,位值为“2”。

5、红框3中为“添加”和“删除”按钮及其操作方式。
对于“添加”操作,覆盖式添加将用新的权限字符串完全覆盖原有的权限字符串,追加式添加则保留原有权限字符串并且将新的权限字符串追加到其后,如,原有权限字符串为“李明:11212”,现添加“张强:11212”,如果是覆盖式添加,则添加后的权限字符串为“张强:11212”,如果为追加式,则为“李明:11212|张强:11212”
对于“删除”操作,“清空”将清空所有权限字符串,“择除”则会将权限用户列表(红框2左侧的列表)中的用户清除而保留其它,“择留”则会保留权限用户列表中的用户而清除其余。比如现有权限字符串为“李明:11212|张强:11212”,如是清空式删除,则权限字符串将为空;如果在权限用户列表中添加“张强”,然后进行择除式删除,则“张强”将被“择除”(选择删除),操作后的结果为“李明:11212”;如果进行择留式删除,“张强”将被“择留”(选择保留),其它将被清除,于是操作后的结果为“张强:11212”


查找修改子模块如下




1、红框1中为查找范围,选中“行权限”,只在行权限区中查找;选中“列权限”,只在列权限区中查找;选中”选区“,则只在鼠标所选区域中查找。

2、红框2中为查找和修改设置区,左边为查找设置,右边为替换设置。在左边的文本框中输入要查找的用户名,按“查找”进行查找。也可以指定特定的权限,如查找有改权限的“李明”,就在文本框中输入“李明”,然后选中“改”后的允许单选框进行查找。
在右边的文本框中输入要替换的用户名,按“替换”按钮就可以把左边查找到的用户替换成右边的用户,但默认只替换用户名而不替换权限,想替换权限,在替换设置部分设置相应的权限,就会用所设置的权限替换原有权限。

3、红框3中用于修改单个行权限或列权限,点击某个权限单元格,其权限用户就会进入权限用户列表中,可以在列表中选择用户进行权限修改。