您的位置:首页 > 移动开发 > Objective-C

谈权限设计问题

2011-08-14 19:48 204 查看
前段时间,我们公司做了一个酒馆软件。里边设涉及到了权限方面的问题,这个模块是我负责开发的,我也对权限的表的设计和实现方法有了了解。

要实现权限需要4张表。

A.用户表:字段有用户名,密码,角色编号。。。

B.角色表:字段包括角色编号(自动增长编号),角色名称。

C.功能模块表:字段包括模块编号,模块名称。

D。权限关系表:字段有自动增长ID,角色id( 角色表外键),模块id(功能模块表外键)。

权限功能的设置我是通过tree控件实现的。

界面如下:


 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using BLL;

using System.Collections;

using System.Web.UI.WebControls;

using System.Data.SqlClient;

namespace HotelCRM

{

    public partial class setQuanxian : Form

    {

        public setQuanxian()

        {

            InitializeComponent();

            bind();

            bindtree(1);

        }

        SysBusiness sysbess = new SysBusiness();

        System.Windows.Forms.TreeNode tn = new System.Windows.Forms.TreeNode();

        List<System.Windows.Forms.TreeNode> _nodeList = new List<System.Windows.Forms.TreeNode>();

        //修改角色

        private void btupdate_Click(object sender, EventArgs e)

        {

          

            ///先删除该角色有的所有功能模块,再重新插入一次

            string name = this.listBox1.SelectedItem.ToString();

            DataSet ds = sysbess.getRoleidbyrolename(name);

            int roleid = Convert.ToInt32(ds.Tables[0].Rows[0][0].ToString());

            int a = sysbess.delusermodel(roleid);

            string str1 = "";

            //选中的节点就插入数据库

            str1 = GetCollection(roleid, this.treemenu);

            str1 = str1.Substring(10);

            string sql = "  insert into Sys_Rank_Menu (rankid ,menuid)   " + str1;

            int a1 = sysbess.ADDrolemodel(sql);

            LogMain lg = new LogMain();

            lg.AddLog(" 修改了角色的权限", " 修改了角色拥有的模块信息  ", 1);//写入日志

            if (a1 > 0)

            {

                MessageBox.Show(" 修改成功!");

            }

            else

            {

                MessageBox.Show(" 修改失败!");

            }

        }

        //绑定角色到listview

        public void bind()

        {

            DataSet ds = sysbess.getAlluserRole();

            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)

            {

                ListItem li = new ListItem();

                li.Text = ds.Tables[0].Rows[i]["RankName"].ToString();

                li.Value = ds.Tables[0].Rows[i]["Rankcode"].ToString();

                this.listBox1.Items.Add(li);

            }

        }

        //权限显示在treeview

      

        public void bindtree(int roleid)

        {

            treemenu.CheckBoxes = true;//显示选择框

       

            DataSet ds = sysbess.getallmenu();

            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)

            {

                System.Windows.Forms.TreeNode tn = this.treemenu.Nodes.Add(ds.Tables[0].Rows[i][0].ToString(), ds.Tables[0].Rows[i][1].ToString());

                DataSet ds1= sysbess.getbianhaoBYid(Convert.ToInt32(tn.Name));

                string bianhao = ds1.Tables[0].Rows[0][0].ToString();//标号

                //判断角色是否有权限

                if (sysbess.ifhavaModel(roleid, bianhao))

                { tn.Checked = true; }

                //父节点编号查询所有子节点

                DataSet dst = sysbess.getallmenuBypid(Convert.ToInt32(ds.Tables[0].Rows[i][0]));

                for (int j = 0; j < dst.Tables[0].Rows.Count; j++)

                {

                    System.Windows.Forms.TreeNode tl = tn.Nodes.Add(dst.Tables[0].Rows[j][0].ToString(), dst.Tables[0].Rows[j][1].ToString());

                    DataSet ds2 = sysbess.getbianhaoBYid(Convert.ToInt32(dst.Tables[0].Rows[j][0].ToString()));

                    string bianhao1 = ds2.Tables[0].Rows[0][0].ToString();//标号

                    if (sysbess.ifhavaModel(roleid, bianhao1))

                    { tl.Checked = true; }

                }

            }

        }

        private string GetCollection(int rid, System.Windows.Forms.TreeView tv)

        {

            string str = "";

            for (int i = 0; i < tv.Nodes.Count; i++)

            {

                System.Windows.Forms.TreeNode p_node = tv.Nodes[i];

                  

                if (p_node.Checked == true)

                {

                    _nodeList.Add(p_node);

                    //str += p_node.Name + ";";

                    str += " union all select " + rid.ToString() + "  ,  " + Convert.ToInt32(p_node.Name);

                }

                for (int j = 0; j < p_node.Nodes.Count; j++)

                {

                    System.Windows.Forms.TreeNode item = p_node.Nodes[j];

                    if (item.Checked == true)

                    {

                        _nodeList.Add(item);

                        //str += item.Name + ";";

                        str += " union all select " + rid.ToString() + "  ,  " + Convert.ToInt32(item.Name);

                    }

                }

            }

            return str;

        }

 

        //加载

        private void setQuanxian_Load(object sender, EventArgs e)

        {

            //this.skinEngine1.SkinFile = "skin//Midsummer.ssk";

        }

        //选项变化时选择框变化

        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)

        {

            this.treemenu.Nodes.Clear();

            ListItem li = (ListItem)this.listBox1.SelectedItem;

            bindtree(int.Parse(li.Value));

         

        

        }

 

 private bool updateTreeNode = false;

        private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)

        {

            if (updateTreeNode) return; // 如果在刷新中

            updateTreeNode = true;

            try

            {

                TreeNodeChild(e.Node, e.Node.Checked); // 同步子节点

                TreeNodeCheck(e.Node, e.Node.Checked);

            }

            finally

            {

                updateTreeNode = false;

            }

        }

        private void TreeNodeChild(System.Windows.Forms.TreeNode ATreeNode, bool AChecked) // 同步子节点

        {

            if (ATreeNode == null) return;

            ATreeNode.Checked = AChecked;

            foreach (System.Windows.Forms.TreeNode vTreeNode in ATreeNode.Nodes)

            {

                TreeNodeChild(vTreeNode, AChecked);

            }

        }

        private void TreeNodeCheck(System.Windows.Forms.TreeNode ATreeNode, bool AChecked)

        {

            if (ATreeNode == null) return;

            ATreeNode.Checked = AChecked;

            if (AChecked) // 如果选中本节点这就是选中全部上级节点

            {

                TreeNodeCheck(ATreeNode.Parent, AChecked);

            }

            else

            {

                if (ATreeNode.Parent != null && ATreeNode.Parent.Checked)

                {

                    foreach (System.Windows.Forms.TreeNode vTreeNode in ATreeNode.Parent.Nodes)

                        if (vTreeNode.Checked) return;

                    TreeNodeCheck(ATreeNode.Parent, AChecked); // 判断是否所有的兄弟节点Checked都为false

                }

            }

        }

        //全选

       private void Btselectall_Click(object sender, EventArgs e)

       {

           for (int i = 0; i < treemenu.Nodes.Count; i++) {

               treemenu.Nodes[i].Checked = true;

           }

       }

    }

}

    

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息