WinForm实现对权限菜单进行管理

一、界面:

二、数据库访问类:

  1  public class DataClass
  2     {
  3         private readonly string connect = ConfigurationManager.AppSettings["connectString"];
  4         public DataClass() { }
  5
  6         /// <summary>
  7         /// 执行查询语句,返回DataSet
  8         /// </summary>
  9         /// <param name="SQLString">查询语句</param>
 10         /// <returns>DataSet</returns>
 11         public DataSet Query(string SQLString)
 12         {
 13
 14             using (MySqlConnection connection = new MySqlConnection(connect))
 15             {
 16                 DataSet ds = new DataSet();
 17                 try
 18                 {
 19                     connection.Open();
 20                     MySqlDataAdapter command = new MySqlDataAdapter(SQLString, connection);
 21                     command.Fill(ds, "ds");
 22                 }
 23                 catch (MySqlException ex)
 24                 {
 25                     throw new Exception(ex.Message);
 26                 }
 27
 28                 return ds;
 29             }
 30         }
 31
 32         /// <summary>
 33         /// 执行查询语句,返回SqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close )
 34         /// </summary>
 35         /// <param name="strSQL">查询语句</param>
 36         /// <returns>SqlDataReader</returns>
 37         public MySqlDataReader ExecuteReader(string strSQL)
 38         {
 39             using (MySqlConnection connection = new MySqlConnection(connect))
 40             {
 41                 MySqlCommand cmd = new MySqlCommand(strSQL, connection);
 42                 try
 43                 {
 44                     connection.Open();
 45                     MySqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
 46                     return myReader;
 47                 }
 48                 catch (System.Data.SqlClient.SqlException e)
 49                 {
 50                     throw e;
 51                 }
 52             }
 53         }
 54
 55         /// <summary>
 56         /// 执行一条计算查询结果语句,返回查询结果(object)。
 57         /// </summary>
 58         /// <param name="SQLString">计算查询结果语句</param>
 59         /// <returns>查询结果(object)</returns>
 60         public object GetSingle(string SQLString)
 61         {
 62             using (MySqlConnection connection = new MySqlConnection(connect))
 63             {
 64                 using (MySqlCommand cmd = new MySqlCommand(SQLString, connection))
 65                 {
 66                     try
 67                     {
 68                         connection.Open();
 69                         object obj = cmd.ExecuteScalar();
 70                         if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
 71                         {
 72                             return null;
 73                         }
 74                         else
 75                         {
 76                             return obj;
 77                         }
 78                     }
 79                     catch (System.Data.SqlClient.SqlException e)
 80                     {
 81                         connection.Close();
 82                         throw e;
 83                     }
 84                 }
 85             }
 86         }
 87
 88         public bool Exists(string strSql)
 89         {
 90             object obj = GetSingle(strSql);
 91             int cmdresult;
 92             if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
 93             {
 94                 cmdresult = 0;
 95             }
 96             else
 97             {
 98                 cmdresult = int.Parse(obj.ToString());
 99             }
100             if (cmdresult == 0)
101             {
102                 return false;
103             }
104             else
105             {
106                 return true;
107             }
108         }
109
110         /// <summary>
111         /// 执行SQL语句,返回影响的记录数
112         /// </summary>
113         /// <param name="SQLString">SQL语句</param>
114         /// <returns>影响的记录数</returns>
115         public int ExecuteSql(string SQLString)
116         {
117             using (MySqlConnection connection = new MySqlConnection(connect))
118             {
119                 using (MySqlCommand cmd = new MySqlCommand(SQLString, connection))
120                 {
121                     try
122                     {
123                         connection.Open();
124                         int rows = cmd.ExecuteNonQuery();
125                         return rows;
126                     }
127                     catch (System.Data.SqlClient.SqlException e)
128                     {
129                         connection.Close();
130                         throw e;
131                     }
132                 }
133             }
134         }
135
136         /// <summary>
137         /// 得到一个对象实体
138         /// </summary>
139         public ModelClass GetModelList(int MenuId)
140         {
141
142             StringBuilder strSql = new StringBuilder();
143             strSql.Append("select MenuId,MenuName,MenuRemark,MenuUrl,ParentMenuId,MenuIcon,MenuSort FROM SYS_Menu ");
144             strSql.Append(" where  MenuId= " + MenuId);
145
146             ModelClass model = new ModelClass();
147             DataSet ds = Query(strSql.ToString());
148             if (ds.Tables[0].Rows.Count > 0)
149             {
150                 if (ds.Tables[0].Rows[0]["MenuId"].ToString() != "")
151                 {
152                     model.MenuId = int.Parse(ds.Tables[0].Rows[0]["MenuId"].ToString());
153                 }
154                 model.MenuName = ds.Tables[0].Rows[0]["MenuName"].ToString();
155                 model.MenuRemark = ds.Tables[0].Rows[0]["MenuRemark"].ToString();
156                 model.MenuUrl = ds.Tables[0].Rows[0]["MenuUrl"].ToString();
157                 if (ds.Tables[0].Rows[0]["ParentMenuId"].ToString() != "")
158                 {
159                     model.ParentMenuId = int.Parse(ds.Tables[0].Rows[0]["ParentMenuId"].ToString());
160                 }
161                 model.MenuIcon = ds.Tables[0].Rows[0]["MenuIcon"].ToString();
162                 if (ds.Tables[0].Rows[0]["MenuSort"].ToString() != "")
163                 {
164                     model.MenuSort = int.Parse(ds.Tables[0].Rows[0]["MenuSort"].ToString());
165                 }
166                 return model;
167             }
168             else
169             {
170                 return null;
171             }
172         }
173
174         /// <summary>
175         /// 增加一条数据
176         /// </summary>
177         public int Add(ModelClass model)
178         {
179             StringBuilder strSql = new StringBuilder();
180             strSql.Append("insert into SYS_Menu(");
181             strSql.Append("MenuName,MenuRemark,MenuUrl,ParentMenuId,MenuIcon,MenuSort)");
182             strSql.Append(" values (");
183             strSql.Append("‘" + model.MenuName + "‘," );
184             strSql.Append("‘" + model.MenuRemark + "‘,");
185             strSql.Append("‘" + model.MenuUrl + "‘,");
186             strSql.Append("‘" + model.ParentMenuId + "‘,");
187             strSql.Append("‘" + model.MenuIcon + "‘,");
188             strSql.Append("‘" + model.MenuSort + "‘)");
189             object obj = ExecuteSql(strSql.ToString());
190             if (obj == null)
191             {
192                 return -1;
193             }
194             else
195             {
196                 return Convert.ToInt32(obj);
197             }
198         }
199
200         /// <summary>
201         /// 删除一条数据
202         /// </summary>
203         public void Delete(int MenuId)
204         {
205             string sql = "delete from SYS_Menu where MenuId = " + MenuId;
206             ExecuteSql(sql);
207         }
208
209         /// <summary>
210         /// 更新一条数据
211         /// </summary>
212         public void Update(ModelClass model)
213         {
214             StringBuilder strSql = new StringBuilder();
215             strSql.Append("update SYS_Menu set ");
216             strSql.Append("MenuName=‘" + model.MenuName + "‘,");
217             strSql.Append("MenuRemark=‘" + model.MenuRemark + "‘,");
218             strSql.Append("MenuUrl=‘" + model.MenuUrl + "‘,");
219             strSql.Append("ParentMenuId=‘" + model.ParentMenuId + "‘,");
220             strSql.Append("MenuIcon=‘" + model.MenuIcon + "‘,");
221             strSql.Append("MenuSort=‘" + model.MenuSort + "‘");
222             strSql.Append(" where MenuId=" + model.MenuId);
223
224             ExecuteSql(strSql.ToString());
225         }
226     }

三、窗体页面代码:

  1  public partial class MenuManager : Form
  2     {
  3         DataClass help = new DataClass();
  4         ModelClass model = new ModelClass();
  5         public MenuManager()
  6         {
  7             InitializeComponent();
  8         }
  9
 10         /// <summary>
 11         /// 窗体载入事件
 12         /// </summary>
 13         /// <param name="sender"></param>
 14         /// <param name="e"></param>
 15         private void MenuManager_Load(object sender, EventArgs e)
 16         {
 17             QueryTreeView();//树型菜单
 18             ComBoxBindInit(); //上级菜单下拉列表初始化
 19         }
 20
 21         /// <summary>
 22         /// 树型菜单查看事件
 23         /// </summary>
 24         /// <param name="sender"></param>
 25         /// <param name="e"></param>
 26         private void bntQuery_Click(object sender, EventArgs e)
 27         {
 28             QueryTreeView();//树型菜单
 29         }
 30
 31         /// <summary>
 32         /// 树型菜单展示
 33         /// </summary>
 34         private void QueryTreeView()
 35         {
 36             BindListView(treeViewMenu);
 37             //展开所有节点
 38             treeViewMenu.ExpandAll();
 39             this.treeViewMenu.Nodes[0].EnsureVisible();//滚动打显示最上方
 40         }
 41
 42         #region 网站树形菜单
 43         public void BindListView(TreeView treeView)
 44         {
 45             //清空树的所有节点
 46             treeView.Nodes.Clear();
 47             //创建根节点
 48             TreeNode rootNode = new TreeNode();
 49             rootNode.Text = "菜单列表";
 50             rootNode.Name = "0";
 51
 52             //展开所有节点
 53             //添加根节点
 54             treeView.Nodes.Add(rootNode);
 55             // 获取所有节点信息
 56             DataTable dt = help.Query(" select MenuId,MenuName,MenuRemark,MenuUrl,ParentMenuId,MenuIcon,MenuSort FROM SYS_Menu Where 1=1 order by ParentMenuId , MenuSort asc  ").Tables[0];
 57             ////创建其他节点
 58             CreateChildNode(rootNode, dt);
 59         }
 60
 61         private void CreateChildNode(TreeNode parentNode, DataTable dataTable)
 62         {
 63             DataRow[] rowList = dataTable.Select("ParentMenuId=‘" + parentNode.Name + "‘");
 64             foreach (DataRow row in rowList)
 65             {   //创建新节点
 66                 TreeNode node = new TreeNode();
 67                 //设置节点的属性
 68                 node.Text = row["MenuName"].ToString();
 69                 node.Name = row["MenuId"].ToString();
 70                 parentNode.Nodes.Add(node);
 71                 //递归调用,创建其他节点
 72                 CreateChildNode(node, dataTable);
 73             }
 74         }
 75         #endregion
 76
 77         /// <summary>
 78         /// 上级菜单初始化
 79         /// </summary>
 80         private void ComBoxBindInit()
 81         {
 82             DataTable dt = help.Query("select MenuId,MenuName,MenuRemark,MenuUrl,ParentMenuId,MenuIcon,MenuSort FROM SYS_Menu ").Tables[0];
 83
 84             DataRow dr = dt.NewRow();
 85             dr["MenuName"] = "=============顶级菜单=============";
 86             dr["MenuId"] = 0;
 87             dt.Rows.InsertAt(dr, 0);
 88
 89             comParentMenuId.DataSource = dt;
 90             comParentMenuId.DisplayMember = "MenuName";
 91             comParentMenuId.ValueMember = "MenuId";
 92
 93         }
 94
 95         /// <summary>
 96         /// 上级菜单重置(即查询所有菜单)
 97         /// </summary>
 98         /// <param name="sender"></param>
 99         /// <param name="e"></param>
100         private void bntInit_Click(object sender, EventArgs e)
101         {
102             txtQueryMenu.Text = "";
103             ComBoxBindInit();
104         }
105
106         /// <summary>
107         /// 模糊查询菜单信息绑定上级菜单下拉列表
108         /// </summary>
109         /// <param name="sender"></param>
110         /// <param name="e"></param>
111         private void bntSelect_Click(object sender, EventArgs e)
112         {
113             DataTable dt = help.Query("select MenuId,MenuName,MenuRemark,MenuUrl,ParentMenuId,MenuIcon,MenuSort FROM SYS_Menu where 1=1 and MenuName like ‘%" + txtQueryMenu.Text.Trim() + "%‘ ").Tables[0];
114
115             DataRow dr = dt.NewRow();
116             dr["MenuName"] = "===无===";
117             dr["MenuId"] = 0;
118             dt.Rows.InsertAt(dr, 0);
119
120             comParentMenuId.DataSource = dt;
121             comParentMenuId.DisplayMember = "MenuName";
122             comParentMenuId.ValueMember = "MenuId";
123         }
124
125         /// <summary>
126         /// 选择节点取值
127         /// </summary>
128         /// <param name="sender"></param>
129         /// <param name="e"></param>
130         private void treeViewMenu_AfterSelect(object sender, TreeViewEventArgs e)
131         {
132             try
133             {
134                 if (e.Node.Text != "菜单列表")
135                 {
136                     ComBoxBindInit();
137                     model = help.GetModelList(Convert.ToInt32(e.Node.Name));
138                     txtMenuId.Text = model.MenuId.ToString();
139                     txtMenuName.Text = model.MenuName;
140                     txtMenuUrl.Text = model.MenuUrl;
141                     txtMenuSort.Text = model.MenuSort.ToString();
142                     txtMenuIcon.Text = model.MenuIcon;
143                     txtMenuRemark.Text = model.MenuRemark;
144                     comParentMenuId.SelectedValue = model.ParentMenuId;
145                 }
146                 else
147                 {
148                     ClearText();
149                 }
150             }
151             catch (Exception ex)
152             {
153                 MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
154             }
155         }
156
157         /// <summary>
158         /// 清空文本内容
159         /// </summary>
160         private void ClearText()
161         {
162             txtMenuId.Text = "";
163             txtMenuName.Text = "";
164             txtMenuUrl.Text = "";
165             txtMenuSort.Text = "";
166             txtMenuIcon.Text = "";
167             txtMenuRemark.Text = "";
168         }
169
170         /// <summary>
171         /// 添加
172         /// </summary>
173         /// <param name="sender"></param>
174         /// <param name="e"></param>
175         private void bntAdd_Click(object sender, EventArgs e)
176         {
177             try
178             {
179                 getModel();//为实体类赋值
180
181                 #region 条件满足判断
182                 //菜单名称不能为空
183                 if (txtMenuName.Text == "")
184                 {
185                     MessageBox.Show("菜单名称不能为空", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
186                     return;
187                 }
188                 //同级菜单中不能有相同菜单名称
189                 if(help.Exists("select count(1) from SYS_Menu where MenuName=‘" + txtMenuName.Text + "‘ and ParentMenuId=" + Convert.ToInt32(comParentMenuId.SelectedValue.ToString())))
190                 {
191                     MessageBox.Show("同级菜单中该名称已存在", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
192                     return;
193                 }
194                 //验证该级菜单是否有相同排序号
195                 if (help.Exists("select count(1) from SYS_Menu where MenuSort=" + Convert.ToInt32(txtMenuSort.Text.Trim()) + " and ParentMenuId=" + Convert.ToInt32(comParentMenuId.SelectedValue.ToString())))
196                 {
197                     MessageBox.Show("该级菜单存在相同排序号!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
198                     return;
199                 }
200                 //排序号必填
201                 if (txtMenuSort.Text == "")
202                 {
203                     MessageBox.Show("排序号不能为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
204                     return;
205                 }
206                 #endregion
207
208                 int result = help.Add(model);//添加
209                 if (result >= 0)
210                 {
211                     MessageBox.Show("添加成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
212                     ClearText();
213                 }
214             }
215             catch (Exception ex)
216             {
217                 MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
218             }
219         }
220
221         /// <summary>
222         /// 修改
223         /// </summary>
224         /// <param name="sender"></param>
225         /// <param name="e"></param>
226         private void bntUpdate_Click(object sender, EventArgs e)
227         {
228             try
229             {
230                 getModel();//为实体类赋值
231
232                 #region 条件满足判断
233                 //菜单名称不能为空
234                 if (txtMenuName.Text == "")
235                 {
236                     MessageBox.Show("菜单名称不能为空", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
237                     return;
238                 }
239                 //同级菜单中不能有相同菜单名称
240                 if (help.Exists("select count(1) from SYS_Menu where MenuId <>" + model.MenuId + " and MenuName=‘" + txtMenuName.Text + "‘ and ParentMenuId=" + Convert.ToInt32(comParentMenuId.SelectedValue.ToString())))
241                 {
242                     MessageBox.Show("同级菜单中该名称已存在", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
243                     return;
244                 }
245                 //验证该级菜单是否有相同排序号
246                 if (help.Exists("select count(1) from SYS_Menu where MenuId<>" + model.MenuId + " and MenuSort=" + Convert.ToInt32(txtMenuSort.Text.Trim()) + " and ParentMenuId=" + Convert.ToInt32(comParentMenuId.SelectedValue.ToString())))
247                 {
248                     MessageBox.Show("该级菜单存在相同排序号!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
249                     return;
250                 }
251                 //排序号必填
252                 if (txtMenuSort.Text == "")
253                 {
254                     MessageBox.Show("排序号不能为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
255                     return;
256                 }
257                 #endregion
258                 if (txtMenuId.Text != "" && help.Exists("select count(1) from SYS_Menu where MenuId=" + model.MenuId))
259                 {
260                     help.Update(model);
261                     MessageBox.Show("更新成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
262                 }
263                 else
264                 {
265                     MessageBox.Show("数据记录不存在!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
266                 }
267
268             }
269             catch (Exception ex)
270             {
271                 MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
272             }
273         }
274
275         /// <summary>
276         /// 删除
277         /// </summary>
278         /// <param name="sender"></param>
279         /// <param name="e"></param>
280         private void bntDelete_Click(object sender, EventArgs e)
281         {
282             try
283             {
284                 if (txtMenuId.Text == "")
285                 {
286                     MessageBox.Show("请选择所要删除的记录", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
287                     return;
288                 }
289                 //删除前先判断是否被其他菜单引用
290                 if (help.Exists("select count(1) from SYS_Menu where ParentMenuId=" + Convert.ToInt32(txtMenuId.Text)))
291                 {
292                     MessageBox.Show("该菜单被子级菜单引用,请先删除引用!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
293                     return;
294                 }
295                 if (MessageBox.Show("确定要删除该记录吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
296                 {
297                     help.Delete(Convert.ToInt32(txtMenuId.Text));
298                     MessageBox.Show("删除成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
299                     ClearText();
300                 }
301             }
302             catch (Exception ex)
303             {
304                 MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
305             }
306         }
307
308         /// <summary>
309         /// 清空
310         /// </summary>
311         /// <param name="sender"></param>
312         /// <param name="e"></param>
313         private void bntClear_Click(object sender, EventArgs e)
314         {
315             ClearText();
316         }
317
318         /// <summary>
319         /// 排序号只能输入数字类型
320         /// </summary>
321         /// <param name="sender"></param>
322         /// <param name="e"></param>
323         private void txtMenuSort_KeyPress(object sender, KeyPressEventArgs e)
324         {
325             if (e.KeyChar != 8 && !Char.IsDigit(e.KeyChar))
326             {
327                 e.Handled = true;
328             }
329         }
330
331         /// <summary>
332         /// 为实体类赋值
333         /// </summary>
334         private void getModel()
335         {
336             if (txtMenuId.Text != "")
337                 model.MenuId = Convert.ToInt32(txtMenuId.Text);
338             model.MenuName = txtMenuName.Text.Trim();
339             model.MenuUrl = txtMenuUrl.Text.Trim();
340             if (txtMenuSort.Text != "")
341                 model.MenuSort = Convert.ToInt32(txtMenuSort.Text.Trim());
342             model.MenuIcon = txtMenuIcon.Text.Trim();
343             model.MenuRemark = txtMenuRemark.Text;
344             model.ParentMenuId = Convert.ToInt32(comParentMenuId.SelectedValue.ToString());
345         }
346
347         /// <summary>
348         /// 光标处于上级菜单查询按下回车执行查询事件
349         /// </summary>
350         /// <param name="sender"></param>
351         /// <param name="e"></param>
352         private void txtQueryMenu_KeyPress(object sender, KeyPressEventArgs e)
353         {
354             if (e.KeyChar == 13)
355             {
356                 bntSelect_Click(sender, e);
357             }
358         }
359
360
361     }
时间: 2024-11-04 03:28:11

WinForm实现对权限菜单进行管理的相关文章

[WinForm]WinForm之简易权限管理

[摘要]陆续在今年写了固定资产和低值易耗品,采购模具管理以及将要进行的制程管理等子系统,都是各自写一个小程序,每次都要搭建下环境.每做一个小系统部署的时候都得打包一次.干脆做一个简易框架去实现吧. 权限管理仿照自己协同工作平台. 表一:菜单管理 CREATE TABLE [dbo].[WinForm_MenuInfo]( [ID] [int] IDENTITY(1,1) NOT NULL, [NAME] [nvarchar](100) NOT NULL, [PARENTID] [int] NOT

基于吉日嘎底层架构的Web端权限管理操作演示-菜单模块管理

按照顺序,这一篇介绍菜单模块管理,主要演示如下操作: 新增.修改.锁定.解锁.删除.撤销删除 排序 角色成员管理 用户成员管理 导出菜单模块数据 也许你会问,你在这自吹自擂,你这个BS的权限管理有啥缺点不?其中一个美中不足之处:没有批量增加权限Action(或者叫Operation)的地方,下一个版本会加上. 演示视频如下: 优酷视频地址,手机无法播放的点击这里:http://v.youku.com/v_show/id_XMTc0MzMxODk1Mg==.html 下一篇会继续讲解组织机构管理

RDIFramework.NET ━ 9.6 模块(菜单)管理 ━ Web部分

RDIFramework.NET ━ .NET快速信息化系统开发框架 9.6  模块(菜单)管理 -Web部分  模块(菜单)管理是整个框架的核心,主要面向系统管理人员与开发人员,对普通用户建议不要授予访问此模块的权限,以免不必要的错误影响整个框架的运行.在框架中看到的各个功能模块都是在这儿进行配置的,配置信息保存在数据库中.模块(菜单)管理主要完成对整个框架各功能模块的添加.修改.删除,模块的移动.合并,模块启用.停用,设置模块是否为公共模块,分配角色.用户的模块访问权限,设置模块的可见性等,

java—不同的用户登录以后可以看到不同的菜单(后台可以实现对用户菜单的管理) 1 (55)

实现不同的用户登录以后可以看到不同的菜单.(后台可以实现对用户菜单的管理.) 第一步:分析数据结构        1:用户表 表名:users 列名 类型 说明 id Varchar(32) 主键 name Varchar(30)         2:菜单表 第二步:写入表中几行数据进行基本分析 insert into users values('U001','Jack','1234'); insert into users values('U002','张三','4321'); insert

以后台权限菜单控制为例,获取js路径后面参数值

<script type="text/javascript" src="../Public/js/common.js?menuids=1,2,3,4,5&ckids=4-5-6" /></script> 需要注意的是,此段js文件位置需要放在页面中所有js包含文件后面,目前暂未想到好的办法解决位置问题. //获取js后面参数 function getUrlArg(){ var url = $("script:last&quo

C#开发微信门户及应用(6)--微信门户菜单的管理操作

前面几篇继续了我自己对于C#开发微信门户及应用的技术探索和相关的经验总结,继续探索微信API并分享相关的技术,一方面是为了和大家对这方面进行互动沟通,另一方面也是专心做好微信应用的底层技术开发,把基础模块夯实,在未来的应用中派上用途.本随笔继续介绍微信门户菜单的管理操作. 1.菜单的基础信息 微信门户的菜单,一般服务号和订阅号都可以拥有这个模块的开发,但是订阅号好像需要认证后才能拥有,而服务号则不需要认证就可以拥有了.这个菜单可以有编辑模式和开发模式,编辑模式主要就是在微信门户的平台上,对菜单进

destoon 给超级管理员系统权限(管理员管理,日志管理等)

destoon 后台某些系统权限除了网站创始人之外其他超管事没有权限的,现需要给其他超级管理员添加普通管理员的权限. 1.首先  admin/global.func.php  admin_check函数 ,去掉admin  这样超管才能访问 ?file=admin } else if($_admin == 1) {?     //if(in_array($file, array('admin', 'setting', 'module', 'area', 'database', 'template

通用权限管理系统之权限菜单zTree树的展示及移动的处理方法

在通用权限管理系统中,有很多数据结构是有父子关系的,如组织机构,部门,权限菜单等,在展示的时候,大多数是通过zTree树的形式展现的,如下: 权限菜单展示 这种数据后台输出比较容易处理,参考如下获取某个子系统的全部操作菜单: 后台输出zTree树的数据 /// <summary> /// 获取module树结构数据 /// </summary> /// <param name="systemCode"></param> /// <r

简洁常用权限系统的设计与实现(一):构造权限菜单树的N(N&gt;=4)种方法

权限系统,Web开发常见标准子系统之一.结合自己的一些思考和实践,从本篇开始权限系统的设计与实现之路. 最近,重构了项目的权限菜单构造过程,向前端返回json格式的权限树. 这一篇,只是大致介绍下这个问题,并给出4种方法的整体思路,后续再分别详细介绍这4种方法,再往后介绍完整的权限系统的设计与实现. 权限表的结构: acl.parent_acl, 最重要的就是这2个字段,有了这2个字段,就可以构造一棵树了. 前端需要的json格式: "data":[{ "acl":