我有一个Web应用程序,需要两种类型的用户,3个但第三个不需要角色:可以访问每个页面的管理员,包括允许控制成员的管理页面;可以访问除管理页面之外的每个页面的成员,他们可以发布他们的数据(游戏的高分);和访客可以访问除管理页面以外的所有页面,他们无法做任何事情。
环顾四周,我发现ASP.NET有角色,但它们仅与三种角色提供者(SqlRoleProvider,WindowsTokenRoleProvider和AuthorizationStoreRoleProvider)相关联。另外我不确定,但我认为ASP.NET的角色连接到整个Membership事件,这意味着除非我使用ASPNETDB.mdb数据库,否则一切都会失败。
无论如何,我必须限制所有人,但管理员从入口到管理页面,并允许成员发布他们的分数。我现在的想法是,在登录时,当我对用户进行身份验证时,我将用户角色存储到cookiless会话数据中,并在每个页面加载时读取它并相应地继续。还有更好的方法吗?
答案 0 :(得分:1)
Asp.net会员资格与数据库无关,你可以自己动手,但我假设你将用户存储在某种数据库中,所以SqlProfileProvider可能就足够了(这可以是任何数据库,不需要是ASPNETDB.mdb)。
有关向现有数据库添加此支持的详细信息,请访问:Create ASP.Net membership database structure in existing database
您将需要类似会员资格,因为您需要登录,您需要角色,这就是会员资格API的全部内容。它还使用行业标准存储等,因此您不必自行编写安全漏洞。
然后,您可以使用web.config文件按角色限制单个页面或更常见的整个文件夹(例如管理文件夹)。
答案 1 :(得分:0)
嗯,只要在自己的数据库中注册成员资格和角色服务,如何调用数据库并不重要。它就像运行aspnet_regsql
命令提示工具一样简单,没有任何参数,它将启动向导(.net样式)来指导您完成这些服务的安装。它所做的只是在你想要的数据库中创建sql server对象(模式,表,sprocs等)
现在,如果您不喜欢这些内置提供程序(特别是我不喜欢),那么没有什么可以阻止您实现自己的提供程序,这很简单,但可能是一个漫长的过程,因为需要实现大量的抽象或虚拟方法/根据您的方法或需要覆盖。你有两个选择来实现自己的......
一个是实现RoleProvider
抽象抽象类或
从SqlRoleProvider
类扩展/继承,它暴露了许多虚拟方法和属性。