首先将需要权限控制的菜单添加打菜单管理中!
在角色管理中将 该角色拥有的菜单打上钩
在页面中读取即可
可以将权限位防止一张表里如这种型式(一对多)
主建 角色id 权限位
1 1
1 2
还可以(1对1)将角色全部防止同一个字段中 如果该位为1 表明他拥有该位的权限 0表明没
第几位是根据添加的菜单主键id来确认的(自增)
主建 角色id 权限位
1 101010101
/// 增加权限串
/// 比如:原始权限串为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 < int , string > p1 = new Dictionary < int , string > ();
IDictionary < int , string > p2 = new Dictionary < int , string > ();
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" οnclick="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>·</em>站内信列表</a></li>
<li><a href="#"><em>·</em>系统提醒邮件</a></li>
<li><a href="#"><em>·</em>群发邮件</a></li>
</ul>
</div>
<%} %>