随笔 - 15  文章 - 0  评论 - 656  阅读 - 10万

[重写默认的4个权限设置相关的类:一]实现自定义用户配置提供程序ProfileProvider

前言

最近在学习ASP.NET,发现了几个有趣的类,比如自定义用户配置提供程序ProfileProvider,成员提供程序MembershipProvider,角色管理RoleProvider,会话状态SessionStateStoreProvider,这几个类经常作为权限相关设置,但是默认这几个类都必须使用定制的数据库,因此造成诸多限制

但如果重写这些类,然后配合.NET原有的API来使用,这样一来用着方便,二来由于提供程序是自定义的,能够满足自己的要求

于是小弟我试着重写这些类,分享自己的一些心得体会,希望各位前辈能够多多指教啦

 

实现自定义用户配置提供程序ProfileProvider

一。说明

在ASP.NET中,可以在web.config文件设置用户个性配置,然后在代码中这么写

 

Code

 

 

这样看似确实很方便,但是缺点就是如果要使用这个用户个性配置,默认是使用SqlProfileProvider,连数据库相关的表都被定死了

唯一的办法就是重写此类,然后让其支持自定义数据库,甚至是支持XML,TXT或者能够想到的任何可以存储信息的媒介

在重写之前,首先要了解该类的一些需要重写的方法和属性

属性
string ApplicationName{get,set} 返回和设置应用程序名
string Name{get} 返回提供程序的名称
string Description{get} 返回一些描述

方法
void Initialize(string name, System.Collections.Specialized.NameValueCollection config) 初始化用的
int DeleteProfiles(string[] usernames) 根据用户名集合来删除用户的个性信息,并返回影响行数
int DeleteProfiles(ProfileInfoCollection profiles) 根据用户信息来删除用户的个性信息,并返回影响行数
ProfileInfoCollection GetAllProfiles(ProfileAuthenticationOption authenticationOption, int pageIndex, int pageSize, out int totalRecords) 获取所有的个性信息,ProfileAuthenticationOption 枚举用于定义是返回匿名用户的还是登陆用户的还是全部的,两个INT型参数用于分页,最后的那个INT参数用于获取返回的行的总数
int DeleteInactiveProfiles(ProfileAuthenticationOption authenticationOption, DateTime userInactiveSinceDate) 删除超时用户的信息
SettingsPropertyValueCollection GetPropertyValues(SettingsContext context, SettingsPropertyCollection collection) 返回当前用户的个性信息
void SetPropertyValues(SettingsContext context, SettingsPropertyValueCollection collection) 设置当前用户的个性信息

还有4个方法,比如
GetNumberOfInactiveProfiles(),FindInactiveProfilesByUserName(),FindProfilesByUserName(),GetAllInactiveProfiles()都是根据条件检索个性信息用的,实现相对简单


二。实现

1.新建立一个项目,然后在App_Data中,添加一个SQL数据库,建立一个表,命名为test1,在表中建立以下字段
UserName  varchar 主键
A int (本次实验中自定义的一个字段)
B varchar (本次实验中自定义的一个字段)
IsAnonymous bit 是否为匿名用户
LastActivityDate datetime 最后访问时间
LastUpdateDate datetime 最后更新时间

2.导入sqlCtrl类(此类专门用于操作数据库,源码中有)


3.接下来是关键示例代码

 

Code

 

4.修改Web.config文件

Code

 

5.接下来就可以直接使用了

 

 

Code

 

 

源码下载 

posted on   RealDigit  阅读(3180)  评论(18编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
< 2009年3月 >
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 1 2 3 4
5 6 7 8 9 10 11

点击右上角即可分享
微信分享提示