开发工具:VFP 9 SP2(7423)+祺佑三层开发框架(猫框)
数据库:MSSQL2000及以上
前面讲了菜单权限,现在来做一个表单功能权限开发,也是极简开发(提高80%的速度,少写80%的代码)。
一、数据库设计
首先来看权限表的设计:增加了 新增,修改,删除,打印权限
二、权限控制界面
所有的逻辑代码都可以不用动
只需要把DAL_RoleRight的SetupCA方法修改如下,可以利用生成器,也可以手工更改一下。
如果不用菜单名(DESCRIPTION)来查找权限,而是且right_id,select 语句还可以再简单一点。
PROCEDURE setupCA
Text to This.SelectCmd noshow
select MODULE,DESCRIPTION,ENABLED,ALLOWNEW,ALLOWDEL,ALLOWEDIT,ALLOWPRT,roleright.ID from roleright inner join rights on roleright.right_id=rights.id
where userid=?this.uid
EndText
Text to This.CursorSchema noshow
MOdule C(50) , DEscription C(50) , ENabled L(1) , ALlownew L(1) , ALlowdel L(1) , ALlowedit L(1) , ALlowprt L(1) , ID I(4)
EndText
Text to This.UpdatableFieldList noshow
ID,ENABLED,ALLOWNEW,ALLOWDEL,ALLOWEDIT,ALLOWPRT
EndText
Text to This.UpdateNameList noshow
MODULE roleright.MODULE,DESCRIPTION roleright.DESCRIPTION,ENABLED roleright.ENABLED,ALLOWNEW roleright.ALLOWNEW,ALLOWDEL roleright.ALLOWDEL,ALLOWEDIT roleright.ALLOWEDIT,ALLOWPRT roleright.ALLOWPRT,ID roleright.ID
EndText
ENDPROC
三、前台操作界面
创建框架表单,拖入框架自响应控件。刷新权限按钮为普通控件。
在框架的开发中实际上是先把所有功能开发完毕,最后一步再开发权限,而权限的开发也非常简单,附加权限类就自动拥有了权限。
实现采购入库权限类(保存为Right_CGRKD.prg)
*-- 实现一个权限子类
Define Class Right_CGRKD As Qiyu_RightManager Of Locfile("Qiyu_RightManager.prg")
Userid=0 &&用户id
Description="" &&功能名称
*-- DO开头为勾子方法(框架约定不得直接调用)
*-- 取得实际权限 用于UI与BLL类,写入状态标志
Procedure DoGetRightStatus
Lparameters oUIBLL
Local lcSQLCmd
TEXT TO lcSQLCmd NOSHOW TEXTMERGE PRETEXT 1+2
select * from roleright inner join Rights
on RoleRight.right_id=Rights.id
WHERE userid=<<this.userid>> and description='<<this.description>>'
ENDTEXT
If This.oDbSQLhelper.SQLQuery(lcSQLCmd,"RightStatus")>0
oUIBLL.isadd=RightStatus.allownew
oUIBLL.isedit=RightStatus.allowedit
oUIBLL.isDel=RightStatus.AllowDel
oUIBLL.isprint=RightStatus.allowprt
Else
oUIBLL.isadd=.F.
oUIBLL.isedit=.F.
oUIBLL.isDel=.F.
oUIBLL.isprint=.F.
Endif
Endproc
Enddefine
采购入库单表单的Load事件
Thisform.oRight=Newobject("right_cgrkd","right_cgrkd.prg")
Thisform.oRight.Userid=1 &&假设是用户id=1登录
Thisform.oRight.Description="采购入库单" &&取采购入库单权限
Thisform.oRight.SetRightStatus(This)
实际上权限就加载成功了,为方便演示,我加了一个按钮,click方法如下:
Thisform.oRight.SetRightStatus(Thisform) &&重新设置权限
最后,我们来看动图。
权限已经更新到第四篇了,可以对比一个代码量可以看出框架的极简开发风是什么感觉了。
框架从来不限制开发者的思维,而是提供给开发者更爽的开发体验。 框架用过的狐友都知道,就是一种说不出来感觉的开发体验,但爽感却是共同的。
少写代码,极速开发就是框架的目标。