Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

红尘如烟Access通用系统v1.1权限设置的不足

lmqlt  发表于:2011-12-11 12:29:52  
复制

红尘如烟老师开发的ACCESS通用系统V1.1非常好用,方便广大ACCESS开发者部署系统,缩短了系统开发的时间。但该系统也存在一些不足,如权限的控制,基本由菜单或者主板进行控制,但对于打开窗体,然后再打开窗体不适用。应该建立一个函数,然后在新打开的窗体LOAD里进行引用,对窗体及按键进行控制,从而达到权限控制目的。看了很多权限例子,但都不如红尘如烟设置得科学和简洁,在这里提出问题,请红尘老师及各位高手多指导。不胜感谢!http://www.accessoft.com/article-show.asp?1=1&ID=3624&page=3

'通用动态菜单命令执行函数,相关参数来源于菜单表及权限表
'参数说明: Command         要执行的操作命令
'           Argument        Command操作命令需要的参数,注意,如果是执行打开窗体操作,可以传递OpenArgs参数
'           AllowOpenRun    是否允许访问
'           AllowAdd        是否允许添加
'           AllowEdit       是否允许修改
'           AllowDelete     是否允许删除
'           AllowPrint      是否允许打印
'           AllowOutput     是否允许导出

Public Function RunMenuCommand(ByVal Command As String, ByVal Argument As String, ByVal AllowOpenRun As Boolean, _
                               ByVal AllowAdd As Boolean, ByVal AllowEdit As Boolean, ByVal AllowDelete As Boolean, _
                               ByVal AllowPrint As Boolean, ByVal AllowOutput As Boolean)
    On Error GoTo Err_RunMenuCommand

……

'按钮权限设置子过程,只由函数RunMenuCommand调用
Private Sub SetupButtonRight(Form As Form, AllowAdd As Boolean, AllowEdit As Boolean, _
                        AllowDelete As Boolean, AllowPrint As Boolean, AllowOutput As Boolean)
On Error Resume Next

    Dim ctl As Control
    Dim blnResult As Boolean
   
    Form.AllowAdditions = AllowAdd
    Form.AllowEdits = AllowEdit
    Form.AllowDeletions = AllowDelete
   
    For Each ctl In Form
        If TypeOf ctl Is CommandButton Then
            If ctl.Tag Like "*添加*" Then
                ctl.Enabled = AllowAdd

 

Top
一过客 发表于:2011-12-11 21:25:14
这个函数是否未写完整 写个完整的东学习 学习 谢谢!!!

lmqlt 发表于:2011-12-11 22:03:13
因为帖子控制7000字以内,程序不能全部拷上去,大家可下载原有程序,地址:http://www.accessoft.com/article-show.asp?1=1&ID=3624&page=3,在模块里查看modGeneral内容。点击下载此附件

lmqlt 发表于:2011-12-11 22:06:11
点击下载此附件 ACCESS通用系统V1.1增加雇员窗体,不同地方打开该窗体,权限控制完全不一样,如何实现同一标准?

lmqlt 发表于:2011-12-17 14:22:55

问题解决了,谢谢大家关注。

其实,用红尘老师的权限对系统全局进行控制,但个别地方可使用更灵活的方式。方法如下:

'在打开的窗体输入如下内容

Private Sub Form_Load()

    Me.AllowAdditions = Nz(DLookup("[FAdd]", "[USysUserRights]", "[FItemId]=171 AND [FUserId]=Forms!frmLogon!txtUserId "), 0) '控制增加记录
    Me.AllowEdits = Nz(DLookup("[fedit]", "[USysUserRights]", "[FItemId]=171 AND [FUserId]=Forms!frmLogon!txtUserId "), 0)  '控制修改记录
    Me.AllowDeletions =Nz(DLookup("[FDelete]", "[USysUserRights]", "[FItemId]=171 AND [FUserId]=Forms!frmLogon!txtUserId "), 0)  '控制删除记录
end sub

 

注:在红尘老师ACCESS通用系统中,权限由表USysUserRights进行控制,表中有FAdd、FEdit、FDelete三个字段,分别控制增加、修改、删除记录,FItemId为窗体ID号,FUserId为用户名,Forms!frmLogon!txtUserId为登陆窗体保留的用户ID号。如果在系统主面板打开窗体,系统先调用菜单,再由菜单函数调用窗体权限控制函数。如果在其他地方打开控制的窗体,则由打开窗体时,重新设置权限。



麥田 发表于:2011-12-17 16:17:54

可以用本站开发的access开发平台

http://www.umvps.com/products.asp?Id=142

 

 

开发出来的效果见

http://www.accessoft.com/accsoft.asp



lmqlt 发表于:2011-12-25 00:26:13
谢谢麦兄,看了你推荐的系统,感觉还是红尘老师的系统简单实用,而且可用性高。不知其他高手用什么系统部署开发的软件?

浪淘沙 发表于:2012-02-02 23:43:23
楼主4楼的办法不错,可以进一步开发一个自定义函数,在窗体加载时调用类似:FormRight Me,同时把控制面板上不允许访问的菜单隐藏掉。这样如果有大量的非控制面板弹出窗口可以批量处理,节省很多精力。没详细研究,仅供参考。

lmqlt 发表于:2012-03-15 23:16:10

问题解决了,谢谢浪淘沙 的启发。

方法如下:1、在公共模块里建立下列函数,2、在其他窗体的LOAD里引用这个函数

 

一、公共函数


Function FOpenRun(n1 As Integer) As Boolean
    FOpenRun = Nz(DLookup("[FAdd]", "[USysUserRights]", "[FItemId]=" & n1 & " AND [FUserId]=Forms!frmLogon!txtUserId "), 0)
End Function


Function FAdd(n1 As Integer) As Boolean
    FAdd = Nz(DLookup("[FAdd]", "[USysUserRights]", "[FItemId]=" & n1 & " AND [FUserId]=Forms!frmLogon!txtUserId "), 0)
End Function


Function FEdit(n1 As Integer) As Boolean
    FEdit = Nz(DLookup("[FAdd]", "[USysUserRights]", "[FItemId]=" & n1 & " AND [FUserId]=Forms!frmLogon!txtUserId "), 0)
End Function


Function FDelete(n1 As Integer) As Boolean
    FDelete = Nz(DLookup("[FAdd]", "[USysUserRights]", "[FItemId]=" & n1 & " AND [FUserId]=Forms!frmLogon!txtUserId "), 0)
End Function


Function FPreview(n1 As Integer) As Boolean
    FPreview = Nz(DLookup("[FAdd]", "[USysUserRights]", "[FItemId]=" & n1 & " AND [FUserId]=Forms!frmLogon!txtUserId "), 0)
End Function


Function FPrint(n1 As Integer) As Boolean
    FPrint = Nz(DLookup("[FAdd]", "[USysUserRights]", "[FItemId]=" & n1 & " AND [FUserId]=Forms!frmLogon!txtUserId "), 0)
End Function


Function FOutPut(n1 As Integer) As Boolean
    FOutPut= Nz(DLookup("[FAdd]", "[USysUserRights]", "[FItemId]=" & n1 & " AND [FUserId]=Forms!frmLogon!txtUserId "), 0)
End Function

 

二、窗体引用函数

Private Sub Form_Load()

    Me.AllowAdditions =FAdd(171)  '控制增加记录 ,其中171为主窗体ID号
    Me.AllowEdits =FEdit(171) '控制修改记录,其中171为主窗体ID号
    Me.AllowDeletions =FDelete(171)  '控制删除记录,其中171为主窗体ID号
end sub

 

 



lmqlt 发表于:2012-03-15 23:54:21
Function FOpenRun(n1 As Integer) As Boolean '打开
    FOpenRun = Nz(DLookup("[FOpenRun]", "[USysUserRights]", "[FItemId]=" & n1 & " AND [FUserId]=Forms!frmLogon!txtUserId "), 0)
End Function
Function FAdd(n1 As Integer) As Boolean '增加
    FAdd = Nz(DLookup("[FAdd]", "[USysUserRights]", "[FItemId]=" & n1 & " AND [FUserId]=Forms!frmLogon!txtUserId "), 0)
End Function
Function FEdit(n1 As Integer) As Boolean  '修改
    FEdit = Nz(DLookup("[FEdit]", "[USysUserRights]", "[FItemId]=" & n1 & " AND [FUserId]=Forms!frmLogon!txtUserId "), 0)
End Function
Function FDelete(n1 As Integer) As Boolean '删除
    FDelete = Nz(DLookup("[FDelete]", "[USysUserRights]", "[FItemId]=" & n1 & " AND [FUserId]=Forms!frmLogon!txtUserId "), 0)
End Function
Function FPreview(n1 As Integer) As Boolean '预览
    FPreview = Nz(DLookup("[FPreview]", "[USysUserRights]", "[FItemId]=" & n1 & " AND [FUserId]=Forms!frmLogon!txtUserId "), 0)
End Function
Function FPrint(n1 As Integer) As Boolean '打印
    FPrint = Nz(DLookup("[FPrint]", "[USysUserRights]", "[FItemId]=" & n1 & " AND [FUserId]=Forms!frmLogon!txtUserId "), 0)
End Function
Function FOutPut(n1 As Integer) As Boolean '导出
    FOutPut = Nz(DLookup("[FOutPut]", "[USysUserRights]", "[FItemId]=" & n1 & " AND [FUserId]=Forms!frmLogon!txtUserId "), 0)
End Function

总记录:9篇  页次:1/1 9 1 :