简单的角色权限管理

首先将需要权限控制的菜单添加打菜单管理中!

 

在角色管理中将 该角色拥有的菜单打上钩

 

在页面中读取即可

 

可以将权限位防止一张表里如这种型式(一对多)

主建  角色id  权限位

       1         1    

       1          2

还可以(1对1)将角色全部防止同一个字段中 如果该位为1 表明他拥有该位的权限 0表明没

第几位是根据添加的菜单主键id来确认的(自增)

主建  角色id  权限位

       1         101010101    

 

   /// <summary>
        
/// 增加权限串
        
/// 比如:原始权限串为101011101,现在需要将 110110110 增加进去
        
/// </summary>
        
/// <returns>返回更新后的权限串</returns>
        public static string AddPowerStr(string powerids, string powerids2)
        {
            
if (string.IsNullOrEmpty(powerids2))
                
return powerids;

            
const int splitLen = 63;                  //Int64.MaxValue 转成二进制字符串的长度            
            int len1 = powerids.Length;
            
int len2 = powerids2.Length;

            
//确保两个权限长度一样
            if (len1 < len2)
            {
                powerids 
= powerids.PadRight(len2, '0');
            }
            
else if (len1 > len2)
            {
                powerids2 
= powerids2.PadRight(len1, '0');
            }

            
//将权限串按splitLen位长度分隔
            IDictionary<intstring> p1 = new Dictionary<intstring>();
            IDictionary
<intstring> p2 = new Dictionary<intstring>();
            
int i = 0;
            
while (powerids.Length > splitLen)
            {              
//将权限串按63位长度分隔
                p1.Add(i, powerids.Substring(0, splitLen));
                p2.Add(i, powerids2.Substring(
0, splitLen));
                powerids 
= powerids.Substring(splitLen);
                powerids2 
= powerids2.Substring(splitLen);
                i
++;
            }
            p1.Add(i, powerids);
            p2.Add(i, powerids2);

            
//位运算进行对比,添加权限
            string newpowerstr = string.Empty;
            
int count = p1.Count;
            
for (i = 0; i < count; i++)
            {
                newpowerstr 
+= Convert.ToString(Convert.ToInt64(p1[i], 2| Convert.ToInt64(p2[i], 2), 2);      //转换成2进制 进行或运算
            }

            
return newpowerstr;
        }

 

 

        /// <summary>
        /// 检查是否拥有某项权限
        /// </summary>
        /// <param name="powerids">用户权限串</param>
        /// <param name="powerid">检测权限位</param>
        /// <returns>是否有权限:true-有权限,false-没权限</returns>
        public static bool CheckPower(string powerids, int powerid)
        {
            //如果检查权限位大于权限串长度,则说明没有权限
            if (powerids.Length < powerid || powerid < 1)
                return false;
            return powerids[powerid - 1].Equals('1');
        }

 

在页面中通过 CheckPower判断该权限位是否存在 存在则显示不存在则该菜单不显示

<%if(!page.CheckPower(1)){ %>
<p class="menu_t" onclick="menu0(1)">
    <strong class="menu_ts"><a href="news_admin.html">资讯管理</a></strong><span class="arrow"><img
        id="img_01" src="images/arrow_02.gif" title="收起" alt="收起" /></span></p>
<div id="info001">
    <ul class="menu_c">
        <li><a href="#"><em>&middot;</em>站内信列表</a></li>
        <li><a href="#"><em>&middot;</em>系统提醒邮件</a></li>
        <li><a href="#"><em>&middot;</em>群发邮件</a></li>
    </ul>
</div>
<%} %>

 

posted @ 2009-07-09 13:28  awp110  阅读(508)  评论(1编辑  收藏  举报