Mondrian利用在Schema中的设置角色来实现行级权限控制数据
前言:之前有一篇專門描述Saiku如何利用schema中的角色控制來(lái)達(dá)到行級(jí)權(quán)限控制操作。
https://blog.csdn.net/Joe192/article/details/100043346
在這篇主要更深入的描述Mondrian中是如何利用schema中的角色結(jié)合saiku來(lái)實(shí)現(xiàn)行級(jí)權(quán)限操作。
首先得了解schema行級(jí)權(quán)限,角色涉及的標(biāo)簽屬性
Role--》角色標(biāo)簽
SchemaGrant--》schema授權(quán)標(biāo)簽?SchemaGrant access: all, none, and all_dimensions
CubeGrant--》cube授權(quán)標(biāo)簽??cube grant access: all or none
HierarchyGrant--》Hierarchy授權(quán)標(biāo)簽?access: all, none, and custom
MemberGrant--》Member授權(quán)標(biāo)簽??access: all and none.
DimensionGrant--》Dimension標(biāo)簽授權(quán)?access: all or none
<Schema metamodelVersion='4.0' name='t_tests' quoteSql='false'><PhysicalSchema><Table name='t_tests'/></PhysicalSchema><Cube caption='t_tests' name='t_tests'><Dimensions><Dimension caption='t_tests' key='id' name='t_tests' table='t_tests'><Attributes><Attribute caption='area' datatype='String' hasHierarchy='true' keyColumn='area' name='area' table='t_tests' visible='true'/><Attribute caption='country' datatype='String' hasHierarchy='true' keyColumn='country' name='country' table='t_tests' visible='true'/><Attribute caption='province' datatype='String' hasHierarchy='true' keyColumn='province' name='province' table='t_tests' visible='true'/><Attribute caption='city' datatype='String' hasHierarchy='true' keyColumn='city' name='city' table='t_tests' visible='true'/><Attribute caption='street' datatype='String' hasHierarchy='true' keyColumn='street' name='street' table='t_tests' visible='true'/><Attribute caption='name' datatype='String' hasHierarchy='true' keyColumn='name' name='name' table='t_tests' visible='true'/><Attribute caption='id' datatype='String' hasHierarchy='true' keyColumn='id' name='id' table='t_tests' visible='false'/></Attributes><!--<Hierarchies><Hierarchy name='ts' allMemberName='All t_test'><Level attribute='country'/><Level attribute='province'/><Level attribute='city'/><Level attribute='street'/></Hierarchy></Hierarchies>--></Dimension></Dimensions><MeasureGroups><MeasureGroup name='t_tests' table='t_tests'><DimensionLinks><FactLink dimension='t_tests'/></DimensionLinks><Measures><Measure aggregator='sum' caption='age' column='age' datatype='Numeric' formatString='#,###.000' name='age' table='t_tests'/></Measures></MeasureGroup></MeasureGroups></Cube><Role name='ROLE_SA'><SchemaGrant access='none'><CubeGrant cube='t_tests' access='all'><!--<HierarchyGrant hierarchy='[ts]' access='custom' topLevel='[ts].[country]' bottomLevel="[ts].[city]"><MemberGrant member='[t_tests].[ts].[中國(guó)].[陜西省]' access='all'/><MemberGrant member='[ts].[country].[中國(guó)].[陜西省].[西安市]' access='all'/><MemberGrant member='[ts].[country].[中國(guó)].[廣東省].[廣州市]' access='all'/><MemberGrant member='[ts].[country].[美國(guó)].[加州].[加州市]' access='all'/></HierarchyGrant>--><!--<DimensionGrant dimension="[t_tests].[country].[中國(guó)]" access="all"/>--><!--<HierarchyGrant hierarchy='[Measures]' access='custom'><MemberGrant member='[Measures].[age]' access='none'/></HierarchyGrant>--><HierarchyGrant hierarchy='[t_tests].[city]' access='custom'><MemberGrant member='[t_tests].[city].[西安市]' access='all'/><MemberGrant member='[t_tests].[city].[廣州市]' access='all'/></HierarchyGrant></CubeGrant></SchemaGrant></Role></Schema>A、通過(guò)行級(jí)權(quán)限控制維度值
<HierarchyGrant hierarchy='[ts]' access='custom' topLevel='[ts].[country]' bottomLevel="[ts].[city]">
這行代碼,hierarchy='[ts]'指層級(jí)name='ts'的,access='custom'自定義,topLevel='[ts].[country]' bottomLevel="[ts].[city]"
范圍訪問(wèn)的維度。
使用層級(jí)授權(quán)必須創(chuàng)建層級(jí)才能達(dá)到行級(jí)權(quán)限控制,否則不起作用。
B、如果不想使用層級(jí)卻想達(dá)到和層級(jí)一樣控制維度咋辦了,只要通過(guò)兩步設(shè)置就能搞定。
第一步:Attribute的hasHierarchy屬性必須為true
第二步:直接使用維表的name,t_tests.city,city為Attribute的name屬性,范圍屬性topLeve和bottomLevel就不起作用了
<HierarchyGrant hierarchy='[t_tests].[city]' access='custom'>
? ? ? ? ? <MemberGrant member='[t_tests].[city].[西安市]' access='all'/>
? ? ? ? ?<MemberGrant member='[t_tests].[city].[廣州市]' access='all'/>
?</HierarchyGrant>
C、通過(guò)行級(jí)權(quán)限控制度量,如何實(shí)現(xiàn)
<HierarchyGrant hierarchy='[Measures]' access='custom'>
? ? ? ? ? <MemberGrant member='[Measures].[age]' access='none'/>
</HierarchyGrant>
這塊直接就不顯該度量。
D、如果控制整個(gè)維度的行級(jí)權(quán)限,直接使用DimensionGrant
<DimensionGrant dimension="[t_tests]" access="all"/>
其中dimension="[t_tests]",t_tests就是維表的name屬性。
總結(jié)
以上是生活随笔為你收集整理的Mondrian利用在Schema中的设置角色来实现行级权限控制数据的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: OWASP TOP 10 2017版本
- 下一篇: GDAL下载