ASP.NET角色管理的基本配置
网友 网络

配置主要包括两个方面

1.数据库配置

2.web应用程序连接数据库的配置

3.web应用程序本身的配置

数据库配置:

首先应建立一个数据库(默认是sqlserver),然后可以建立一个相应数据库的用户,注意权限要配置正确,比如允许登录,允许访问等操作。有了这样一个数据载体,接下来就是配置数据库以支持角色管理功能。

asp.net 2.0及其之后版本,提供了aspnet_regsql.exe(ASP.NET SQL Server 注册工具)工具用于配置数据库,用于创建供 ASP.NET 中的 SQL Server 提供程序使用的 Microsoft SQL Server 数据库,或者用于在现有数据库中添加或移除选项。他可以在数据库中生成需要的表(以asp_开头)、视图和存储过程等对象,用于将角色管理相关的用户、角色和权限等进行存储和检索。这方面文章很多,由于有些文章都是整个所有配置操作都写在一起,思路方面不太清晰,我这里的操作步骤觉得更为合理,所以摘录这一配置的部分过程:

注:利用aspnet_regsql工具可以建立相关的数据表以及存储过程。也许是因为知识产权的原因,Microsoft并没有为Oracle数据库提供类似的工具,因而需要我们自己去创建数据表和存储过程。

摘录开始(摘自http://home.myzqu.com/space-6-do-blog-id-388.html

一、打开aspnet_regsql.exe,单独使用以下语句将启动配置向导,你也可以利用命令行参数来完成配置过程。
v2.0.50727,可以在C:\WINDOWS\Microsoft.NET\Framework\下输入dir来获取.NET的版本号
 

MSDN关键字:Aspnet_regsql.exe可以查找相关参数配置的信息。
二、向导模式(在数据库中添加应用程序服务(成员资格、配置文件、角色管理、个性化设置(WebPart一类的)以及SQL Web事件提供程序)如果只需要单独添加其中的一项,请使用参数配置的方式,以下方式的默认参数为all)
 
 
 
 
 
按照提示选择合适的就可以了,默认选中的第一项是在原有的数据库基础上添加表和存储过程来完成配置。
 
 
在这里数据库选择你要添加的数据库,一般为应用程序所在的数据库。可以在下拉列表中选择。

本文笔者(Lerit)注:在上图中,如果选择windows身份验证,则数据库如果不选择,那么将会自动创建一个叫做aspnetdb的数据库(若不存在)来建立相关配置;另,如果选择sql server 身份验证,那么如果也不选择任何数据库,默认将在此用户的默认数据库去创建;还有,若使用sql server身份验证,如果输入的用户名的默认数据库不是master,则无法展开下拉菜单,因为默认的需要执行:SELECT name FROM sysdatabases ORDER BY name,(不是sys.sysdatabases 哦),如果默认数据库不是master,则会报错,因此只能不选择了,而在此用户默认数据库中创建。最后,无论上面哪种情况,在数据库下拉框中直接输入数据库名(存在或不存在均可)都是可以的(只要你有创建数据库或者在存在的指定库中有创建各种对象的权限)。其实这里默认的使用windows身份验证就ok了,因为为处输入的用户名,并不代表我们以后就必须使用此用户名作为角色管理的数据库访问用户。(这里只是列举各种可能的情况而已)
 

 

 
 

摘录完毕

ok,到此为止,数据库的配置完成了,等待着用于支持web应用中的角色管理了。

web应用程序连接数据库的配置:

首先是建立web项目,在VS.NET中,这一过程就不再说了,最终生成一个web应用程序,假设这就是未来我们需要进行控制的web应用程序吧。接下来操作:

(1)首先应该与上一步建立好的数据库建立联系,也就是设置连接字符串,这样才能将两者关联起来。我使用的是windows server 2008 操作系统,因此是IIS7,这个设置过程可以在图形界面中完成。(这个工具只能自动设置连接类型为sql server,也就是不能自动设置providerName为其他的,必须手动修改)。

在管理工具中打开IIS,在默认网站上右键,选择“新建应用程序”,弹出窗口中填写别名比如testweb,然后设置物理路径,指向我们建立好的web应用程序,即可。然后用双击新建立好的应用程序,在右侧双击选择“连接字符串”,出现如下图所示:

 

 

可见,有一个默认连接字符串(LocalSqlServer)了,但是这个字符串是从machine.config继承来的(而并非是次web应用程序的web.config中有的),也就是全局的所有web.config共享的。这是由于VS中由于默认使用的是SQLServerExpress,并且成员关系Membership类总是被默认地和SQLServerExpress联系起来使用,如果你使用的是.net自带的一些数据库相关的控件,例如login控件,这些控件默认使用的是.netframework中的默认连接串:LocalSqlServer。我们可以使用这个默认连接字符串(名称是不可以改的),但是应该根据需要,右键-编辑,然后填写我们上面设置好的数据库名等相关信息。无论你是否觉得使用此默认连接字符串,强烈建议不要删除它,因为从machine.config继承来的配置中,还有其他地方需要用到此字符串,除非我们逐一的在web.config中去删除,否则会因为找不到此字符串而报错的。

当然,如果我们必须新建连接字符串名称,比如们的数据库可能是其他的数据源提供的,那么我们就应该手动来配置一个新的连接名称了。我们这里就采用这种比较复杂的方式。我们这里先新建一个,新建连接方法很简单,在界面中右键“添加”,弹出窗口如下:

 

然后填写我们之前建立的数据库名、数据库服务器的主机名或ip地址,数据库登录名和密码,就会自动生成一个连接字符串(也可以自定义进行编辑),并自动插入到当前web应用程序的web.config中:

<connectionStrings>

<add connectionString="Server=localhost;Database=TESTDB;Integrated Security=true" name="MyCustomDB" />

</connectionStrings>

注意:这里的用户名应该对连接的数据库具有管理权限,例如需要excute等操作,所以一般将这个用户授予sysadmin的服务器角色,否则后面的操作将会产生无权限的错误。至此,我们就通过图形界面方式配置了连接字符串。当然,若没有IIS7,或者干脆不想用这个,我们完全可以直接手动将上面的这个代码加入到web.config中。至此完成了第二步。web应用程序本身的配置:上面我们只将一个普通的web程序连接到了一个数据库中,虽然数据库中已经配置了角色管理的相关对象,但是要让这个普通web应用程序也支持角色管理,还需要进一步配置,我们这里手动在webconfig中进行配置:(也可以结合IIS工具和ASP.NET网站管理工具来配合着修改一些参数,比如可以在此工具中修改authentication mode 为Forms,可以启用roleManager (enabled="true" )等,参考《ASP.NET网站管理工具 1》、《Membership 详解之 Provider》、《Role 详解之 Provider》即可)

摘录开始(节选自ASP.net Membership角色与权限管理

在system.web节点下添加authentication节点。

membership既然是用于成员资格管理,当然要求登录验证身份,所以首先加上一个forms验证。

<authentication mode="Forms">
</authentication>

同样在system.web节点下添加membership节点。

<membership defaultProvider="AspNetSqlMembershipProvider" userIsOnlineTimeWindow="15" hashAlgorithmType="">
<providers>
<clear/>
<add connectionStringName="MyCustomDB" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression="" name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</membership>

为membership配置web.config后,再配置其角色管理roleManager,也是在system.web下。

<roleManager enabled="true" cacheRolesInCookie="true">
<providers>
<clear/>
<add connectionStringName="MyCustomDB" applicationName="/" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</roleManager>

摘录完毕

只需要注意上面的红色connectionStringName要和我们之前设置的完全一致。其他参数可以根据自己需要进行修改,可以参考原文,不再赘述。ok,至此,我们完成了asp.net 角色管理的最基本配置,现在已经可以支持asp.net的角色管理功能了,接下来就是应用了。

强烈推荐╭☆涩 轨ら的关于角色管理的系列文章,里面也有许多关于应用方面的介绍,比如基本的一些现有的控件使用,还有其底层的Membership 等类及其方法的介绍。

 
CIO之家 www.ciozj.com 公众号:imciow
关联的文档
也许您喜欢