(搬运).net起步 (通过 Membership 进行权限控制)
来源:互联网 发布:linux读取u盘文件 编辑:程序博客网 时间:2024/05/19 18:47
在所有的基本配置都完毕后,我们还需要配置哪些目录允许被匿名访问,哪些是需要用户登录后允许访问的页面。
首先:我们在项目中建立一个 admin 文件夹,在 admin 文件夹中添加一个 web.config 文件,然后在其中的 <system.web> 节点下面添加如下代码:
<authorization> <allow users="admin"/> <deny users="*"/> </authorization>
然后我们在 admin 目录下再添加一个页面,然后访问该页面,看一下效果。如果您按照我们前面的实验所说的内容全部正确配置了,那么你会发现,页面并没有显示出来,而是跳转到了我们之前在 <authentication> 下 <forms> 节点的 LoginUrl 属性所指向的页面,要求登录!这不就是我们需要的效果吗?
现在来解释一下上面配置的含义:
顾名思义就是允许访问的意思, <allow users="admin"/> 就是允许用户名
为 "admin" 的用户访问。
<deny> 节点:
就是禁止访问。这里用到了一个通配符 “*” ,通配符有两个: * 代表所有用户,还有一个 “?” 代表所有匿名用户。所以 <deny users="*"/> 就是不允许所有用户访问的意思啦,当然如果是: <deny users="?"/> 那意思就是不允许所有匿名用户访问
需要说明的是:所有的配置都是按照从上到下的顺序来匹配的,一但匹配成功,就不再向下匹配。举个例子:
<authorization><allow users="admin"/><allow users="zhangsan"/><deny users="*"/></authorization>ASP.NET 首先检测当前登录的用户名 =="admin" ?如果等于则不继续判断,直接允许该用户访问。如果不等于则继续判断当前登录的用户名 =="zhangsan" 等于,则允许访问,不等于则接着向下,读取到了 <deny users="*"/> 这个配置,拒绝所有用户访问,跳转到 LoginUrl 指定的页面要求重新登录。
可是如果这样,只能实现目录一级的权限控制,如果要控制某个文件的访问权限,又该如何做呢?难道非得把这个文件放到一个文件夹中,然后再添加 web.config 进行控制么?答案是否定的,对于单个文件的访问控制, ASP.NET 也有相应的配置:
<configuration><location path="a.aspx"><system.web><authorization><deny users="?"/></authorization></system.web></location> <system.web><authorization><allow users="admin"/><allow users="zhangsan"/><deny users="*"/></authorization> </system.web></configuration>看上面这个配置,我们可以在 <system.web> 节点之上(必须是上面)再增加一个<location> 节点,通过 path 属性指明 location 内的配置是单独针对哪个文件即可。不过需要注意的一点就是: location 节点可以有多个。这意味着同一个目录下的不同文件可以有不同的访问权限。
好了,配置到这里算是完成一多半了。还有一个问题就是:如果我们的用户比较多,那么需要在配置文件中把这些用户全部罗列其中。并且以后添加了新用户,还得继续修改配置,太麻烦了!该怎么办呢?通用的做法就是引入角色的概念。给所有的用户分配一个角色,比如: users , admin等。然后我们只需要控制这些角色的访问权限即可。以后添加了新用户只需给这个新用户分配角色,而不用去修改配置,实在是方便。其实, membership 也提供了角色的概念,只需要简单的配置一下就可以实现了。
要实现角色功能,非常简单,我们还是去 machine.config(C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config) 的 <system.web> 节点下面找到<roleManager> 节点,然后整个节点复制过来到 web.config 中去,一般会有两个 <add> 子结点 ,我们删除一个,留下一个就可以了。全部内容如下:
<roleManager><providers><add name="AspNetSqlRoleProvider" connectionStringName="LocalSqlServer" applicationName="/" type="System.Web.Security.SqlRoleProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/><add name="AspNetWindowsTokenRoleProvider" applicationName="/" type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/></providers></roleManager>这个配置比较简单,各项配置和前面配置都一样,稍微修改一下:
<roleManager enabled="true" defaultProvider="myAspNetSqlRoleProvider"> <providers> <add name="myAspNetSqlRoleProvider" connectionStringName="ConnectionString" applicationName="TestMembership" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> </providers> </roleManager>
注意:这个 roleManager 多了个属性 enable="true" ,这是因为角色管理默认情况下是关闭的,所以我们必须得设置为开启才行。PS:
1.Culture分为的Neutral Culture 和 Specific Culture,Neutral Culture,它是“与某种语言关联但不与国家/地区关联的区域性”的含义。Specific Culture ,它就是和某个地区国家有关的了。Culture=neutral:简单来说就是中性,中立的意思,就是不区分区域性的组件。
2.PublicKeyToken:是Public Key的简单形式,我们就可以把PublicKeyToken当成PublicKey.这里说明一下PublicKeyToken的存在。PublicKeyToken的作用就是确定要加载的DLL一定要是最初的那个DLL,其实,这一方面也起到了安全方面的防范问题。
以下设置表示只允许 Administrator 角色访问。我们将上面建立的 admin 目录配置为只允许Administrator 角色访问。
<system.web><authorization><allow roles=“Administrator”/><deny users=“*" /></authorization></system.web>
- (搬运).net起步 (通过 Membership 进行权限控制)
- (搬运).net起步 (MemberShip 的配置)
- (搬运).net起步 (MemberShip 初步实例)
- (搬运).net起步(通过Membership和MembershipUser创建用户管理系统)
- (搬运).net起步 (身份验证机制 membership 项目演练)
- (搬运).net起步 (自定义 PasswordRecovery 控件)
- (搬运).net起步 (自定义 ASP.NET CreateUserWizard 控件1)
- (搬运).net起步 (自定义 ASP.NET CreateUserWizard 控件2)
- (搬运).net起步 (使用 ASP.NET Login 控件的高级功能)
- (搬运).net起步 (构建 T ASP.NET 三层架构实例演示)
- (搬运).net起步 (对 Login 控件添加图文验证码)
- (搬运).net起步 (初步创建具有成员资格和用户登录功能的网站)
- (搬运).net起步 (用配置文件属性维护网站用户信息 1)
- (搬运).net起步 (用配置文件属性维护网站用户信息 2)
- (搬运).net起步 (用配置文件属性维护网站用户信息 3)
- html 通过ajax进行权限控制
- struts下通过过滤器进行权限控制
- struts下通过过滤器进行权限控制
- RM -RF /
- Flink Yarn配置
- Java的方法重载和方法覆盖的区别
- stl迭代器模式
- 初始HTML
- (搬运).net起步 (通过 Membership 进行权限控制)
- 【合并Shader】合并渲染状态
- angularjs之checkbox
- float
- Lecture3: Evaluation
- android热修复--手写热修复
- SonicOperator之算法优化2
- ubuntu 16.04 源码安装 nginx
- canvas 绘图出现模糊问题的解决方法