管理中心使用 asp.net 自带的 membership roleManager profile 存放所有可登录用户 , 所有角色,用户角色关系,此功能可以模仿asp.net 网站管理工具(开源)实现,
ASP.NET 应用程序的功能列表(功能ID 功能名称 RUL ) , 通过 各个 ASP.NET 应用程序 所提供的 WEBAPI (一个 URL) 获得的json 数据得到
拦截器: 利用 IHttpModule 开发一个class ,编译成dll ,放入bin 文件夹中,通过web。config 添加到系统中 ,不修改原 ASP.NET 应用程序 代码
利用asp.net 自带的 membership roleManager profile 模块能够配置多应用适配器的功能很容易实现多应用程序的用户,角色,访问权限的分布存储和统一管理, 对 membership roleManager profile 不了解的读者请先查阅相关资料。
web config具体配置
membership :
<membership>
<providers>
<clear/>
<add applicationName="mymag" name="mymag" connectionStringName="DefaultConnection" type="System.Web.Security.SqlMembershipProvider" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" />
</providers>
</membership>
说明: membership 保存所有登录用户信息,所有只需要一个适配器, applicationName 是访问权限管理中心名称 mymag,name 适配器名称, connectionStringName 数据库连接字符串名称
roleManager :
<roleManager enabled="true" defaultProvider="mymag" >
<providers>
<clear/>
<add name="mymag" type="System.Web.Security.SqlRoleProvider" connectionStringName="DefaultConnection" applicationName="mymag"/>
<add name="asp1" type="System.Web.Security.SqlRoleProvider" connectionStringName="DefaultConnection" applicationName="asp1"/>
<add name="asp2" type="System.Web.Security.SqlRoleProvider" connectionStringName="DefaultConnection" applicationName="asp2"/>
</providers>
</roleManager>
说明:roleManager 用于保存多个asp.net应用程序各自的角色 ,所以需要多个适配器。 applicationName 分别对应 ASP.NET 应用程序名称 ,name 分别对应适配器名称, connectionStringName 数据库连接字符串名称 因本管理系统数据都存放于一个数据库中,所以和 membership的connectionStringName 一一样。 当然也可以使用多个连接字符串将数据保存到不同数据库中,这也是 membership 系统强大之处。不过 放在一起也没问题,只要
applicationName 正确, 角色就不会混乱。
c# 代码 : 用 Roles.Providers 可以读取所有的 role 适配器,也就是 ASP.NET 应用程序名称 ,Roles.Providers["asp1"] 对象中有很多方法,例如: .CreateRole 创建用户 GetAllRoles 获取所有用户 , 等
profile :
<profile enabled="true" defaultProvider=" mymag" automaticSaveEnabled="false">
<providers>
<clear/>
<add name="mymag" type=" System.Web.Profile.SqlProfileProvider" connectionStringName="DefaultConnection" applicationName="mymag"/>
</providers>
<properties>
<add name="apps" type="System.String[]" allowAnonymous="false" defaultValue="" readOnly="false"/>
</properties>
</profile>
说明: powers 用于存放用户已授权APPNAME
c# 参考代码 :
var p= ProfileBase.Create(username);
p.SetPropertyValue(" apps", new string[] { "P01", "P02" });
p.Save();
var s = P.GetPropertyValue(" apps");
获得webapi 数据参考代码:
System.Net.WebClient c = new System.Net.WebClient();
string jsonstr= c.DownloadString("http://1921.168.0.1/webapi");
拦截器:
创建一个类库项目 ,参考代码:
namespace SecurityManagementCenter
{
public class Handler : IHttpModule
{
public void Init(HttpApplication context)
{
context.AuthenticateRequest += new EventHandler(context_BeginRequest);
}
void context_BeginRequest(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
HttpContext context = application.Context;
////在此添加权限验证代码
context.Response.Write("error " + DateTime.Now.ToString()); //返回错误信息
application.CompleteRequest(); //终止访问
return;
}
将项目编译的DLL放置于个 各个 asp.net程序 bin 目录中
web.config 中 <configuration> 添加 配置节点 如下
经典模式 // 仅 asp.net 访问有效
<system.web>
<httpModules>
<add name="SecurityManagementCenter" type="SecurityManagementCenter.Handler,SecurityManagementCenter"/>
</httpModules>
</system.web>
集成模式 // preCondition="managedHandler" 仅 asp.net 访问
<system.webServer>
<modules>
<add name="SecurityManagementCenter" type="SecurityManagementCenter.Handler,SecurityManagementCenter" preCondition="managedHandler" />
</modules>
</system.webServer>
并完成一个测试型项目 , 源码地址 https://code.csdn.net/peiyu_peiyu/websecuritymanagementcentersystem