大湿教我写程序5之按钮权限控制篇附上权限系统图片素材和按钮控制前端源码.docx
- 文档编号:17664509
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:15
- 大小:18.58KB
大湿教我写程序5之按钮权限控制篇附上权限系统图片素材和按钮控制前端源码.docx
《大湿教我写程序5之按钮权限控制篇附上权限系统图片素材和按钮控制前端源码.docx》由会员分享,可在线阅读,更多相关《大湿教我写程序5之按钮权限控制篇附上权限系统图片素材和按钮控制前端源码.docx(15页珍藏版)》请在冰豆网上搜索。
大湿教我写程序5之按钮权限控制篇附上权限系统图片素材和按钮控制前端源码
大湿教我写程序(5)之按钮权限控制篇(附上权限系统图片素材和按钮控制前端源码)
引言
“大雄,晚饭你吃什么?
外卖我帮你一起叫。
”
“点个毛的外卖呀,上次你不是接了个万把块的私单么,说了请我吃饭的。
别又装不记得啊,也别学老板,沙县小吃大酒店打发不了我。
”
“别提了,单子刚接的时候让我先做,现在弄完了一堆东西让我改,每个按钮都要用权限控制太坑爹了。
一共也才给了我3000块首付款。
”
“就那点功能还不简单。
”
“你能帮我做?
”
“先把饭请了再说吧,到时候看心情。
”
“好吧,我先出点血,没给我弄好把你吃进去的全挤出来,翔都挤出来。
”
一小时后
“饭也吃了,开工吧。
”
“上次教过你做菜单权限的,实现方法是做一个角色菜单对应关系的中间表,那么按钮也一样啊。
你做个按钮与角色对应关系表,就可以将指定的按钮分配给角色,登陆过后就从数据库中取出权限,放入缓存或者session都可以判断”
“哦,如果用户角色有那个权限我就让显示按钮,没权限就直接不显示了,可是我怎么动态控制按钮的显示呢?
”
“脑子怎么还是这么死板呢?
以前教你做菜单导航的时候不都是动态加载的么,一样的拼接html代码。
”
详细设计
“哦哦,昨晚睡太晚,把这个给忘了,别说了我自己来做吧”
开工了,听大湿这么一说,这个动态控制按钮权限就跟动态菜单权限非常一样了。
分成三步:
1、建立按钮基本信息:
定义按钮大小、显示图片、显示文字。
表结构如下:
CREATETABLE[dbo].[BPMS_Button](
[ButtonId][varchar](50)NOTNULL,
[FullName][varchar](50)NOTNULL,
[Img][varchar](50)NULL,
[Event][varchar](200)NULL,
[Control_ID][varchar](50)NOTNULL,
[Category][varchar](50)NOTNULL,
[Split][int]NULL,
[Description][varchar](200)NULL,
[Enabled][int]NULL,
[SortCode][int]NULL,
[DeleteMark][int]NULL,
[CreateDate][datetime]NULL,
[CreateUserId][varchar](50)NULL,
[CreateUserName][varchar](50)NULL,
[ModifyDate][datetime]NULL,
[ModifyUserId][varchar](50)NULL,
[ModifyUserName][varchar](50)NULL,
CONSTRAINT[PK_BPMS_BUTTON]PRIMARYKEYNONCLUSTERED
(
[ButtonId]ASC
)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]
)ON[PRIMARY]GOSETANSI_PADDINGOFF
GOEXECsys.sp_addextendedproperty@name=N'MS_Description',@value=N'按钮主键',@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE',@level1name=N'BPMS_Button',@level2type=N'COLUMN',@level2name=N'ButtonId'
GOEXECsys.sp_addextendedproperty@name=N'MS_Description',@value=N'按钮名称',@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE',@level1name=N'BPMS_Button',@level2type=N'COLUMN',@level2name=N'FullName'
GOEXECsys.sp_addextendedproperty@name=N'MS_Description',@value=N'按钮图标',@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE',@level1name=N'BPMS_Button',@level2type=N'COLUMN',@level2name=N'Img'
GOEXECsys.sp_addextendedproperty@name=N'MS_Description',@value=N'按钮事件',@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE',@level1name=N'BPMS_Button',@level2type=N'COLUMN',@level2name=N'Event'
GOEXECsys.sp_addextendedproperty@name=N'MS_Description',@value=N'控件ID',@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE',@level1name=N'BPMS_Button',@level2type=N'COLUMN',@level2name=N'Control_ID'
GOEXECsys.sp_addextendedproperty@name=N'MS_Description',@value=N'分类',@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE',@level1name=N'BPMS_Button',@level2type=N'COLUMN',@level2name=N'Category'
GOEXECsys.sp_addextendedproperty@name=N'MS_Description',@value=N'是否分开',@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE',@level1name=N'BPMS_Button',@level2type=N'COLUMN',@level2name=N'Split'
GOEXECsys.sp_addextendedproperty@name=N'MS_Description',@value=N'描述',@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE',@level1name=N'BPMS_Button',@level2type=N'COLUMN',@level2name=N'Description'
GOEXECsys.sp_addextendedproperty@name=N'MS_Description',@value=N'有效:
1-有效,0-无效',@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE',@level1name=N'BPMS_Button',@level2type=N'COLUMN',@level2name=N'Enabled'
GOEXECsys.sp_addextendedproperty@name=N'MS_Description',@value=N'排序吗',@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE',@level1name=N'BPMS_Button',@level2type=N'COLUMN',@level2name=N'SortCode'
GOEXECsys.sp_addextendedproperty@name=N'MS_Description',@value=N'删除标记:
1-正常,0-删除',@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE',@level1name=N'BPMS_Button',@level2type=N'COLUMN',@level2name=N'DeleteMark'
GOEXECsys.sp_addextendedproperty@name=N'MS_Description',@value=N'创建时间',@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE',@level1name=N'BPMS_Button',@level2type=N'COLUMN',@level2name=N'CreateDate'
GOEXECsys.sp_addextendedproperty@name=N'MS_Description',@value=N'创建用户主键',@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE',@level1name=N'BPMS_Button',@level2type=N'COLUMN',@level2name=N'CreateUserId'
GOEXECsys.sp_addextendedproperty@name=N'MS_Description',@value=N'创建用户',@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE',@level1name=N'BPMS_Button',@level2type=N'COLUMN',@level2name=N'CreateUserName'
GOEXECsys.sp_addextendedproperty@name=N'MS_Description',@value=N'修改时间',@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE',@level1name=N'BPMS_Button',@level2type=N'COLUMN',@level2name=N'ModifyDate'
GOEXECsys.sp_addextendedproperty@name=N'MS_Description',@value=N'修改用户主键',@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE',@level1name=N'BPMS_Button',@level2type=N'COLUMN',@level2name=N'ModifyUserId'
GOEXECsys.sp_addextendedproperty@name=N'MS_Description',@value=N'修改用户',@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE',@level1name=N'BPMS_Button',@level2type=N'COLUMN',@level2name=N'ModifyUserName'
GOEXECsys.sp_addextendedproperty@name=N'MS_Description',@value=N'操作按钮',@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE',@level1name=N'BPMS_Button'
GO
重点字段说明:
按钮名称:
按钮对应的名称
按钮图标:
显示的都是图片按钮,动态拼按html代码时根据这个字段去找到对应的图标
按钮事件:
按钮要响应的JS事件
控件ID:
控件对应的ID
分类:
哪一类的按钮,菜单栏还是工具栏
排序码:
按钮排第几个
前台界面设计:
2、建立按钮与模块对应关系:
即当前页面上有哪些按钮是可以显示的,显示的前后顺序。
表结构:
CREATETABLE[dbo].[BPMS_SysMenuButton](
[SysMenuButtonId][varchar](50)NOTNULL,
[MenuId][varchar](50)NULL,
[ButtonId][varchar](50)NULL,
[CreateDate][datetime]NULL,
[CreateUserId][varchar](50)NULL,
[CreateUserName][varchar](50)NULL,
[SortCode][int]NOTNULL,
CONSTRAINT[PK_BPMS_SYSMENUBUTTON]PRIMARYKEYNONCLUSTERED
(
[SysMenuButtonId]ASC
)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]
)ON[PRIMARY]GOSETANSI_PADDINGOFF
GOEXECsys.sp_addextendedproperty@name=N'MS_Description',@value=N'菜单导航按钮关系主键',@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE',@level1name=N'BPMS_SysMenuButton',@level2type=N'COLUMN',@level2name=N'SysMenuButtonId'
GOEXECsys.sp_addextendedproperty@name=N'MS_Description',@value=N'菜单主键',@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE',@level1name=N'BPMS_SysMenuButton',@level2type=N'COLUMN',@level2name=N'MenuId'
GOEXECsys.sp_addextendedproperty@name=N'MS_Description',@value=N'按钮主键',@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE',@level1name=N'BPMS_SysMenuButton',@level2type=N'COLUMN',@level2name=N'ButtonId'
GOEXECsys.sp_addextendedproperty@name=N'MS_Description',@value=N'发生时间',@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE',@level1name=N'BPMS_SysMenuButton',@level2type=N'COLUMN',@level2name=N'CreateDate'
GOEXECsys.sp_addextendedproperty@name=N'MS_Description',@value=N'创建用户主键',@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE',@level1name=N'BPMS_SysMenuButton',@level2type=N'COLUMN',@level2name=N'CreateUserId'
GOEXECsys.sp_addextendedproperty@name=N'MS_Description',@value=N'创建用户',@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE',@level1name=N'BPMS_SysMenuButton',@level2type=N'COLUMN',@level2name=N'CreateUserName'
GOEXECsys.sp_addextendedproperty@name=N'MS_Description',@value=N'排序码',@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE',@level1name=N'BPMS_SysMenuButton',@level2type=N'COLUMN',@level2name=N'SortCode'
GOEXECsys.sp_addextendedproperty@name=N'MS_Description',@value=N'菜单导航操作按钮关系表',@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE',@level1name=N'BPMS_SysMenuButton'
GO
重点字段说明:
菜单主键:
对应菜单的主键
按钮主键:
按钮的主键
排序码:
按钮排在第几个这里当你在前台勾选一个按钮,后台就记录下了菜单和这个按钮的对应关系
到了菜单权限分配界面,根据选定的菜单ID从数据库中获取含该菜单主键的所有有效记录,再根据按钮表拼接html代码,前端将有关按钮全部显示出来
界面设计:
这里讲一下勾选的按钮,按钮按下去之后就会变颜色,并且上面出现一个小勾。
这其实是两个div合成的。
如何加载这些按钮请见如下动态拼接html代码
publicvoidInitButton()
{
DataTabledt=bpms_sysmenubuttonibll.GetListWhere(_Menu_Id);
if(DataTableHelper.IsExistRows(dt))
{
for(inti=0;i<dt.Rows.Count;i++)
{
stringcheckbuttonNo="checkbuttonNo";
stringtriangleNo="triangleNo";
if(CommonHelper.GetDateTime(dt.Rows[i]["IsExist"])<DateTime.Now)
{
checkbuttonNo="checkbuttonOk";
triangleNo="triangleOk";
}
if(dt.Rows[i]["Category"].ToString()=="工具栏")
{
htmlButtontoolbar.Append("<divtitle=\""+dt.Rows[i]["Description"]+"\"class=\""+checkbuttonNo+"panelcheck\">");
htmlButtontoolbar.Append("<divid=\""+dt.Rows[i]["ButtonId"]+"\"class=\"checktext\">");
htmlButtontoolbar.Append("<imgsrc=\"../../Themes/Images/16/"+dt.Rows[i]["Img"]+"\"/>"+dt.Rows[i]["FullName"]+"");
htmlButtontoolbar.Append("</div>");
htmlButtontoolbar.Append("<divclass=\""+triangleNo+"\"></div>");
htmlButtontoolbar.Append("</div>");}
elseif(dt.Rows[i]["Category"].ToString()=="右击菜单栏")
{
htmlButtonApplication.Append("<divtitle=\""+dt.Rows[i]["Description"]+"\"class=\""+checkbuttonNo+"panelcheck\">");
htmlButtonApplication.Append("<divid=\""+dt.Rows[i]["ButtonId"]+"\"class=\"checktext\">");
htmlButtonApplication.Append("<imgsrc=\"../../Themes/Images/16/"+dt.Rows[i]["Img"]+"\"/>"+dt.Rows[i]["FullName"]+"");
htmlButtonApplication.Append("</div>");
htmlButtonApplication.Append("<divclass=\""+triangleNo+"\"></div>");
htmlButtonApplication.Append("</div>");
}
}
}
}
通过以上这段代码就可以看得很明白,按钮由div组成,首先从数据库中加载菜单对应的记录。
根据记录中的按钮ID去获取按钮表中的基础数据,然后拼接html代码,就可以得到一个个按钮,这里需要注意的一点是:
已分配的按钮和未分配的按钮样式是不一样的,所以在拼接的时候进行一个判断,然后根据结果去加载不同的CSS样式。
下面是CSS样式
/*自定义复选框*/
.checkbuttonNo{
margin:
5px;
width:
auto;
border:
solid3px#ccc;
h
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大湿教 程序 按钮 权限 控制 附上 系统 图片素材 前端 源码