Coalesys PanelBar + R.a.d Treeview +Xml 构建的Asp.net 菜单和权限管理模块 (转)
在设计权限管理模块时没用角色这个概念,而是用不同用户登录时显示各自权限内的菜单的这个方法,鉴于Coalesys PanelBar for Asp.net 这个控件功能的强大,就用它做应用程序的主控菜单,不同用户登录时调用已自己ID命名的 userfile XML文件
1
PanelBar1.LoadXml(Server.MapPath(userfile));

userfile的xml代码片断
1
<Group Caption="系统管理" Expanded="true">
2
<Item Caption="权限管理" IconImage="/net_places.gif" URL="SoftAccount.aspx" Target="internalFrame" />
3
<Item Caption="基础数据" IconImage="/control_panel.gif" URL="BaseDataMain.aspx" Target="internalFrame" />
4
<Item Caption="系统运行" IconImage="/documents.gif" URL="SystemRun.aspx" Target="internalFrame" />
5
</Group>
6
<Group Caption="销售管理" Expanded="true">
7
<Item Caption="订单管理" IconImage="/net_places.gif" URL="OrderControlMain.aspx" Target="internalFrame" />
8
<Item Caption="审核订单" IconImage="/control_panel.gif" URL="OrdersControl/OrderAudit.aspx" Target="internalFrame" />
9
<Item Caption="订单汇总" IconImage="/documents.gif" URL="WebForm4.aspx" Target="internalFrame" />
10
</Group>

2

3

4

5

6

7

8

9

10

关键是如何在系统中增加、更新用户的权限?鉴于权限的层次关系,我觉得用treeview来操作是最直观和方便的。我用一个XML文件作为菜单主控文件,
1
<?xml version="1.0" encoding="gb2312" ?>
2
<Tmodules>
3
<Tmodule moduleName="系统管理" Expanded="true">
4
<Cmodule>
5
<funcName>权限管理</funcName>
6
<IconImage>/net_places.gif</IconImage>
7
<URL>SoftAccount.aspx</URL>
8
<Target>internalFrame</Target>
9
</Cmodule>
10
<Cmodule>
11
<funcName>基础数据</funcName>
12
<IconImage>/control_panel.gif</IconImage>
13
<URL>BaseDataMain.aspx</URL>
14
<Target>internalFrame</Target>
15
</Cmodule>
16
<Cmodule>
17
<funcName>系统运行</funcName>
18
<IconImage>/documents.gif</IconImage>
19
<URL>SystemRun.aspx</URL>
20
<Target>internalFrame</Target>
21
</Cmodule>
22
</Tmodule>
23
<Tmodule moduleName="销售管理" Expanded="true">
24
<Cmodule>
25
<funcName>订单管理</funcName>
26
<IconImage>/net_places.gif</IconImage>
27
<URL>OrderControlMain.aspx</URL>
28
<Target>internalFrame</Target>
29
</Cmodule>
30
<Cmodule>
31
<funcName>审核订单</funcName>
32
<IconImage>/control_panel.gif</IconImage>
33
<URL>WebForm4.aspx</URL>
34
<Target>internalFrame</Target>
35
</Cmodule>
36
<Cmodule>
37
<funcName>订单汇总</funcName>
38
<IconImage>/documents.gif</IconImage>
39
<URL>WebForm4.aspx</URL>
40
<Target>internalFrame</Target>
41
</Cmodule>
42
</Tmodule>
43
<Tmodule moduleName="客户关系管理" Expanded="true">
44
<Cmodule>
45
<funcName>客户管理</funcName>
46
<IconImage>/net_places.gif</IconImage>
47
<URL>CustomerBase.aspx</URL>
48
<Target>internalFrame</Target>
49
</Cmodule>
50
<Cmodule>
51
<funcName>客户汇总</funcName>
52
<IconImage>/control_panel.gif</IconImage>
53
<URL>WebForm4.aspx</URL>
54
<Target>internalFrame</Target>
55
</Cmodule>
56
57
58
</Tmodule>
59
<Tmodule moduleName="往来管理" Expanded="true">
60
<Cmodule>
61
<funcName>销售发票</funcName>
62
<IconImage>/net_places.gif</IconImage>
63
<URL>WebForm4.aspx</URL>
64
<Target>internalFrame</Target>
65
</Cmodule>
66
<Cmodule>
67
<funcName>销售收款</funcName>
68
<IconImage>/control_panel.gif</IconImage>
69
<URL>WebForm4.aspx</URL>
70
<Target>internalFrame</Target>
71
</Cmodule>
72
<Cmodule>
73
<funcName>费用支出</funcName>
74
<IconImage>/documents.gif</IconImage>
75
<URL>WebForm4.aspx</URL>
76
<Target>internalFrame</Target>
77
</Cmodule>
78
<Cmodule>
79
<funcName>银行查询</funcName>
80
<IconImage>/net_setup.gif</IconImage>
81
<URL>WebForm4.aspx</URL>
82
<Target>internalFrame</Target>
83
</Cmodule>
84
</Tmodule>
85
<Tmodule moduleName="仓库管理" Expanded="true">
86
<Cmodule>
87
<funcName>仓库</funcName>
88
<IconImage>/net_places.gif</IconImage>
89
<URL>StocksControl/StockControlMain.aspx</URL>
90
<Target>internalFrame</Target>
91
</Cmodule>
92
93
94
95
</Tmodule>
96
<Tmodule moduleName="市场管理" Expanded="true">
97
<Cmodule>
98
<funcName>潜在客户</funcName>
99
<IconImage>/net_places.gif</IconImage>
100
<URL>CustomerBase.aspx</URL>
101
<Target>internalFrame</Target>
102
</Cmodule>
103
<Cmodule>
104
<funcName>竞争对手</funcName>
105
<IconImage>/control_panel.gif</IconImage>
106
<URL>WebForm4.aspx</URL>
107
<Target>internalFrame</Target>
108
</Cmodule>
109
<Cmodule>
110
<funcName>合作伙伴</funcName>
111
<IconImage>/documents.gif</IconImage>
112
<URL>Commpany.aspx</URL>
113
<Target>internalFrame</Target>
114
</Cmodule>
115
116
117
</Tmodule>
118
</Tmodules>

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

通过XSLT转化为生成radtreeview的XML文件也就是生成一棵权限树,这样新增、更新用户权限时可以在这棵权限树里操作,进而生成userfile,而且如果系统更新了功能菜单,只要手工修改一下菜单主控文件(更新系统模块功能一般由开发人员完成),然后让系统管理员执行一下XSLT转化就更新了权限树,实际运行中还是很方便的。
XSLT文件如下:
1
<?xml version="1.0" encoding="utf-8"?>
2
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
3
<xsl:output method="xml" indent="yes" encoding="utf-8" omit-xml-declaration="no" />
4
<xsl:template match="/">
5
<xsl:element name="Tree">
6
<xsl:apply-templates/>
7
</xsl:element>
8
</xsl:template>
9
<xsl:template match="Tmodules">
10
<xsl:apply-templates select="Tmodule"/>
11
</xsl:template>
12
<xsl:template match="Tmodule">
13
<xsl:element name="Node">
14
<xsl:attribute name="Text">
15
<xsl:value-of select="@moduleName"/>
16
</xsl:attribute>
17
<xsl:attribute name ="Expanded">true</xsl:attribute>
18
19
<xsl:apply-templates select="Cmodule"/>
20
</xsl:element>
21
</xsl:template>
22
<xsl:template match="Cmodule">
23
<xsl:apply-templates select="funcName"/>
24
</xsl:template>
25
<xsl:template match="funcName">
26
<xsl:element name="Node">
27
<xsl:attribute name="Text">
28
<xsl:value-of select="."/>
29
</xsl:attribute>
30
</xsl:element>
31
</xsl:template>
32
33
34
</xsl:stylesheet>
35

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

如何把userfile文件中的权限显示为treeview的选中的节点


























新增、更新用户权限就是更新userfile:





































































































看看界面效果:/Files/masey/gif.rar
分类:
收藏柜
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!