这几天在做MusicStore项目的练习,但是当做到创建项目角色,来完成访问页面的不同权限的时候就出问题了,
不过刚刚已经解决了,先总结如下:
问题:
当创建一个项目的时候当然不希望所有的用户都能任意访问你的页面,一般是后台的部分只有管理员才能访问
那该如何设置这个管理员角色呢?打开项目点击“项目”->“asp.net 配置”,自动打开浏览器,启动网站
管理工具。
其实这个网络管理工具就是一个图形化的Web.config文件控制器,你的所有图形化的操作会反应在项目的
web.config文件中。点击"安全",里面有创建管理角色等功能,但是问题就是我的应用就是无法打开这个
“安全”选项。
解决:
接下来我开始一点点找问题的原因,我发现用网络管理工具之所以能够创建用户,创建角色其实是调用项目
里面的数据库文件,对其进行了一定的操作。但是MusicStore项目指导书里面并没有详细的提这一点,按
照上面的提示一步步做是行不通的。
我重新建了一个mvc3的项目,记得要建Internet项目,而不是empty。项目默认会创建一个asp.net数
据库来保存个人帐号信息,然后再次启用这个网络管理工具,这是“安全”选项是好用的。
通过自己的项目跟新项目中web.config文件的对比我发现了一些不同之处。
我自己的项目的connectionstrings的name是MusicStoreEntities。但是程序
默认的数据库连接会是DefaultConnection,而当使用网站管理工具创建角色、用户
的是有他默认识别的时DefaultConnection,而不是MusicStoreEntities。
所以我的解决办法是又添加了一个新的连接,通过新连接创建数据库单独来存放用户信息。
<add name="DefaultConnection" providerName="System.Data.SqlClient"
connectionString="Data Source=(LocalDb)\v11.0;
Initial Catalog=aspnetDB;Integrated Security=SSPI;
AttachDBFilename=|DataDirectory|\aspnetDB.mdf" />。
这样之后还是没能解决问题,郁闷~
通过一番折腾,发现其实web.config里面的<profile> <membership> <roleManager>
<sessionState>这几个节点是真正起作用的,每个节点里面都有一个<providers>子节点。
这是里面的connectionStringName属性来指明我们的连接字符串的名字(DefaultConnection)
但是把这个(比如<profile>)节点它不是直接能调用<providers>子节点的
connectionStringName。而是通过一个defaultProvider属性,属性的值就是<providers>
节点的name值。这样一折腾才会调用到connectionStringName继而调用到DefaultConnection。
就拿<membership>来讲,它的详细代码如下:
<membership defaultProvider="DefaultMembershipProvider">
<providers>
<add connectionStringName="DefaultConnection"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
requiresUniqueEmail="false"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="6"
minRequiredNonalphanumericCharacters="0"
passwordAttemptWindow="10"
applicationName="/"
name="DefaultMembershipProvider"
type="System.Web.Providers.DefaultMembershipProvider,
System.Web.Providers, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35" />
</providers>
</membership>
我的错误就是忘记给<membership>节点加上defaultProvider属性了。这一点完成之后,便能顺利的
利用网站管理工具了。另外通过这个例子我还明白了为什么默认情况下保存帐号的数据库里面会生成这么多
表呢,这些表都是哪些代码作用生成的呢。(这下基本明吧了吧^_^)
是不是觉得很多表的名字其实与web.config里面的节点的名字是一一对应的啊。
好了,就到这了吧,希望也能对刚入手mvc的大家有所帮助。
^_^同为新手望多交流,新浪围脖:@开拓者345