以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  请教狐爸们,关于使用角色进行可视化授权的问题?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=32769)

--  作者:wengfuyy
--  发布时间:2013/5/8 0:09:00
--  请教狐爸们,关于使用角色进行可视化授权的问题?
今天看到了帮助里关于可视化授权的例子,感觉太高兴了,正当我准备造成我的程序时,发现我是使用角色作为授权的,我感觉大多数的软件都应该是用角色作授权,而用组作为部门和单位。
所以想请狐爸们帮忙改造一下下面的代码,改成用角色来授权的。先谢谢了。

Tables("授权表").Visible = (User.Type <> UserTypeEnum.User )
If
User.Type = UserTypeEnum.User Then
   
For Each dr As DataRow In DataTables("授权表").Select("分组名 = \'" & User.Group & "\'" )
        If
dr.IsNull("列名")
Then
           
Tables(dr("表名")).Visible = Not dr("不可见")
            Tables
(dr("表名")).AllowEdit = Not dr("不可编辑")

        Else
           
Tables(dr("表名")).Cols(dr("列名")).Visible = Not dr("不可见")
            Tables
(dr("表名")).Cols(dr("列名")).AllowEdit = Not dr("不可编辑")
        End
If
    Next
End
If

--  作者:Bin
--  发布时间:2013/5/8 8:40:00
--  
参考这里做吧 http://www.foxtable.com/help/topics/2346.htm
--  作者:wengfuyy
--  发布时间:2013/5/8 12:43:00
--  
谢谢回复。帮助我已经看过多遍了,感觉用角色授权还是要复杂些,但应用范围更广。凭我目前的水平还写不出来,所以想请老师帮忙。最好是作者能写出来加入到帮助文档里。
--  作者:Bin
--  发布时间:2013/5/8 14:19:00
--  
没有什么区别,也没有复杂一些.
dim strs as string()=User.Roles.split(",")
dim rs as string
for each s as string in strs
     rs=rs & ",\'" & s & "\'"
next

Tables("授权表").Visible = (User.Type <> UserTypeEnum.User )
If
 User.Type = UserTypeEnum.User Then
    
For Each dr As DataRow In DataTables("授权表").Select("分组名 in (" & rs & ")" )
        If
 dr.IsNull("列名"
Then
            
Tables(dr("表名")).Visible = Not dr("不可见")
            Tables
(dr("表名")).AllowEdit = Not dr("不可编辑")

        Else
            
Tables(dr("表名")).Cols(dr("列名")).Visible = Not dr("不可见")
            Tables
(dr("表名")).Cols(dr("列名")).AllowEdit = Not dr("不可编辑"
        End
 
If
    Next
End
 
If

--  作者:wengfuyy
--  发布时间:2013/5/8 23:12:00
--  
谢谢BIN老师!
感觉你编程的水平非常高,特别是像这种写法——User.Roles.split(","),值得我好好学习。但我有还有疑问:
对于一个人同时属于两个(或以上)角色的情况,权限的叠加后,与原来代码要反映的情况是有很大差别的,还是拿帮助中王五的例子来说吧:

图片点击可在新窗口打开查看此主题相关图片如下:f08.png
图片点击可在新窗口打开查看
如果是按用户名或者用户分组,王五以上两个权限综合后的结果是:他看不到表A的第三列,不能编辑表A的第八列。通过帮助中的以上代码得到了实现。
但是,如果我们换成角色,如下图

图片点击可在新窗口打开查看此主题相关图片如下:f07.png
图片点击可在新窗口打开查看
假设还是王五,同时属于角色一和角色二。根据分析,我认为综合后的权限是:王五对表A具有全部权限,即既可见,又可编辑。这显然与上面的情况不同,所以不能用相同的代码来实现。
如果我以上的分析没有错的话,希望BIN老师能继续修完善下代码。相信凭你的水平,要做好是没问题的。听说易表里是有可视化授权的,但不知知道有没有针对角色的功能。如果做好了,我希望能放到帮助文件里,使之能够惠及更多的学员。
谢谢!
[此贴子已经被作者于2013-5-8 23:21:06编辑过]

--  作者:zerov
--  发布时间:2013/5/9 7:19:00
--  
同求,例如分组中有“总部、北京分公司、天津分公司”,角色中有总经理、经理、主管、员工,如果实现登录用户如果是总部员工,则可见所有表的所有行,如果是北京分公司的员工,则只可见所有表的北京分公司的数据,如果实现?
--  作者:wengfuyy
--  发布时间:2013/5/9 8:57:00
--  
请问有没有用过易表的朋友?易表的可视授权能处理角色吗?如果能,借用过来不就行了吗?


--  作者:wengfuyy
--  发布时间:2013/5/9 9:03:00
--  
以下是引用zerov在2013-5-9 7:19:00的发言:
同求,例如分组中有“总部、北京分公司、天津分公司”,角色中有总经理、经理、主管、员工,如果实现登录用户如果是总部员工,则可见所有表的所有行,如果是北京分公司的员工,则只可见所有表的北京分公司的数据,如果实现?
你这个问题跟我的不是一回事,要简单多了。你的是针对“行”的授权,很容易实现,从这里开始学习吧:http://www.foxtable.com/help/topics/2247.htm


--  作者:Bin
--  发布时间:2013/5/9 9:06:00
--  
你测试过了吗?真的不行吗?我看了一下代码,效用完全一样的啊.
--  作者:Bin
--  发布时间:2013/5/9 9:12:00
--  
刚测试了一下代码.完全没问题.

注意这里要 in (" & rs.trim(",") & ")" )  去掉第一个逗号.