Foxtable(狐表)用户栏目专家坐堂 → 请教狐爸们,关于使用角色进行可视化授权的问题?


  共有6531人关注过本帖树形打印复制链接

主题:请教狐爸们,关于使用角色进行可视化授权的问题?

帅哥哟,离线,有人找我吗?
wengfuyy
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:125 积分:918 威望:0 精华:0 注册:2013/4/12 2:00:00
请教狐爸们,关于使用角色进行可视化授权的问题?  发帖心情 Post By: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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/5/8 8:40:00 [只看该作者]


 回到顶部
帅哥哟,离线,有人找我吗?
wengfuyy
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:125 积分:918 威望:0 精华:0 注册:2013/4/12 2:00:00
  发帖心情 Post By:2013/5/8 12:43:00 [只看该作者]

谢谢回复。帮助我已经看过多遍了,感觉用角色授权还是要复杂些,但应用范围更广。凭我目前的水平还写不出来,所以想请老师帮忙。最好是作者能写出来加入到帮助文档里。

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By: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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:125 积分:918 威望:0 精华:0 注册:2013/4/12 2:00:00
  发帖心情 Post By: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
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:867 积分:6210 威望:0 精华:0 注册:2012/11/24 20:44:00
  发帖心情 Post By:2013/5/9 7:19:00 [只看该作者]

同求,例如分组中有“总部、北京分公司、天津分公司”,角色中有总经理、经理、主管、员工,如果实现登录用户如果是总部员工,则可见所有表的所有行,如果是北京分公司的员工,则只可见所有表的北京分公司的数据,如果实现?

 回到顶部
帅哥哟,离线,有人找我吗?
wengfuyy
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:125 积分:918 威望:0 精华:0 注册:2013/4/12 2:00:00
  发帖心情 Post By:2013/5/9 8:57:00 [只看该作者]

请问有没有用过易表的朋友?易表的可视授权能处理角色吗?如果能,借用过来不就行了吗?


 回到顶部
帅哥哟,离线,有人找我吗?
wengfuyy
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:125 积分:918 威望:0 精华:0 注册:2013/4/12 2:00:00
  发帖心情 Post By:2013/5/9 9:03:00 [只看该作者]

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


 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/5/9 9:06:00 [只看该作者]

你测试过了吗?真的不行吗?我看了一下代码,效用完全一样的啊.

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/5/9 9:12:00 [只看该作者]

刚测试了一下代码.完全没问题.

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

 回到顶部
总数 17 1 2 下一页