"/>
EC.Permissions.Config主要是实现了IConfigurationSectionHandler接口,来完成自定义的配置
admin/test下面web.config
xml version="1.0"?
>
xmlversion="1.0"?
>
account
test
Default.aspx
列表
2
Default.aspx
编辑
16
Default.aspx
删除
32
Ok.aspx
测试
2
1.串行化web.config
EC.Permissions.Config类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
namespace EC.Permissions
{
public class Config :
IConfigurationSectionHandler
{
#region IConfigurationSectionHandler Members
public object Create(object parent, object configContext, System.Xml.XmlNode section)
{
//EC.Permissions.PermissionInfo
string typeName = ((XmlElement)section).GetAttribute("type");
Type type = Type.GetType(typeName);
XmlSerializer xz = new XmlSerializer(type);
using (StringReader sr = new StringReader(section.OuterXml))
{
return xz.Deserialize(sr);
}
}
#endregion
}
}
2.EC.Permissions.PermissionInfo类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
namespace EC.Permissions
{
[Serializable]
[XmlRoot("Permission")]
public class PermissionInfo
{
///
/// 权限数据库ID
///
public int PermissionId { get; set; }
///
/// 用户组ID
///
public string RoleId { get; set; }
///
/// 用户组名
///
public string RoleName { get; set; }
///
/// 模块路径
///
[XmlElement("ModulePath", typeof(string))]
public string ModulePath { get; set; }
///
/// 模块名字
///
[XmlElement("ModuleName", typeof(string))]
public string ModuleName { get; set; }
///
/// 权限值
///
public PermissionType PermissionValue { get; set; }
[XmlArrayItem("Item", typeof(PermissionItemInfo))]
public PermissionItemInfo[] Items { get; set; }
}
[Serializable]
[XmlRoot("Items")]
public class PermissionItemInfo
{
[XmlElement("Page", typeof(string))]
public string Page { get; set; }
[XmlElement("Function", typeof(string))]
public string Function { get; set; }
[XmlElement("Val", typeof(int))]
public int Value { get; set; }
public override bool Equals(object obj)
{
if (obj == null)
return false;
if (this.GetType() !
= obj.GetType())
return false;
if (((PermissionItemInfo)obj).Page == this.Page) return true;
return base.Equals(obj);
}
}
///
/// 权限类型
///
public enum PermissionType
{
ALL=0,
LIST=2,
VIEW=4,
ADD=8,
EDIT=16,
DELETE=32,
PRINT=64
}
}
3.EC.Permissions.DAL数据库访问
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Web.Security;
using System.Data;
using EC.DBUtility;
using System.Data.SqlClient;
using System.Configuration;
using System.Web;
namespace EC.Permissions
{
public class DAL
{
private static DataAccessManager dataAccessManager = new DataAccessManager();
///
/// 判断页面是否有此权限
/// 1.得到当前用户所有的用户组
/// 2.得到所有用户组的权限并取并集
///
///
///
public static bool CheckPage()
{
bool bResult = false;
PermissionInfo pi = GetPermissionInfo;
if (pi == null)
return true;
Hashtable ht = GetPermissionsByRole();
if (ht.Count > 0)
{
string key = string.Format("M-{0}", FolderPath);
if (ht.ContainsKey(key))
{
string filename = GetFileName;
//拆箱取出并判断权限
PermissionInfo ht_PermissionInfo = (PermissionInfo)ht[key];
foreach (PermissionItemInfo temp in pi.Items)
{
if (temp.Page.ToLower().Equals(filename) && ((Convert.ToInt32(ht_PermissionInfo.PermissionValue)&temp.Value)==temp.Value))
{
bResult = true;
break;
}
}
}
}
return bResult;
}
///
/// 判断按钮是否有此权限
/// 1.得到当前用户所有的用户组
/// 2.得到所有用户组的权限并取并集
///
///
///
public static bool CheckButton(PermissionType type)
{
bool bResult = false;
Hashtable ht = GetPermissionsByRole();
if (ht.Count > 0)
{
string key = string.Format("M-{0}", FolderPath);
if (ht.ContainsKey(key))
{
//拆箱取出并判断权限
PermissionInfo ht_PermissionInfo = (PermissionInfo)ht[key];
bResult = (ht_PermissionInfo.PermissionValue & type) == type;
}
}
return bResult;
}
///
/// 当前目录
///
public static String FolderPath
{
get
{
string paths = HttpContext.Current.Request.ServerVariables["SCRIPT_NAME"].ToString();
return paths.ToLower();
}
}
///
/// 获取当前访问页面地址
///
public static string GetFileName
{
get
{
string paths= HttpContext.Current.Request.ServerVariables["SCRIPT_NAME"].ToString();
return paths.Substring(paths.LastIndexOf("/") + 1).ToLower();
}
}
///
/// 获取当前目录下权限配置集合
///
public static PermissionInfo GetPermissionInfo
{
get
{
return (PermissionInfo)ConfigurationManager.GetSection("Permission");
}
}
///
/// 得到所有用户组的权限并取并集
///
///
public static Hashtable GetPermissionsByRole()
{
Hashtable ht = new Hashtable();
string[] rolesArr=Roles.GetRolesForUser();
string roles = string.Join("','", rolesArr);
roles = "'" + roles + "'";
SqlParameter[] parms = new SqlParameter[2];
parms[0] = new SqlParameter("roles", SqlDbType.NVarChar);
parms[0].Value = roles;
parms[1] = new SqlParameter("path", SqlDbType.NVarChar);
parms[1].Value = FolderPath;
//读取用户组的所有权限
using (IDataReader dr = dataAccessManager.ReadDatabase.ExecuteSpReader("aspnet_Ex_GetPermissionByRoles", parms))
{
while (dr.Read())
{
PermissionInfo permissioninfo = new PermissionInfo();
permissioninfo.PermissionId = Convert.ToInt32(dr["PermissionId"]);
permissioninfo.RoleId = Convert.ToString(dr["RoleId"]);
permissioninfo.ModulePath = Convert.ToString(dr["ModulePath