在不使用成员身份的情况下管理和限制角色



我有一个web应用程序,它需要两种类型的用户,嗯,3,但第三种不需要角色:管理员,可以访问每个页面,包括允许控制成员的管理页面;会员可以访问除管理页面外的每个页面,并可以发布他们的数据(游戏的高分);客人可以访问除管理页面之外的所有页面,但他们实际上什么都做不了。

环顾四周,我发现ASP。NET有角色,但它们仅绑定到三种类型的角色提供程序(SqlRoleProvider、WindowsTokenRoleProvider和AuthorizationStoreRoleProvider)。我也不确定,但我认为ASP。NET的角色连接到整个Membership,这意味着除非我使用ASPNETDB.mdb数据库,否则一切都会失败。

无论如何,我必须限制除管理员以外的所有人进入管理页面,并允许会员发布他们的分数。我现在的想法是,在登录时,当我对用户进行身份验证时,我会将用户角色存储到无Cookiles会话数据中,并在每次加载页面时读取它,然后相应地进行操作。有更好的方法吗?

Asp.net成员资格不绑定到数据库,您可以自己滚动,但我假设您将把用户存储在某种数据库中,因此SqlProfileProvider可能就足够了(这可以是任何数据库,不需要是ASPNETDB.mdb)。

将此支持添加到现有数据库的详细信息如下:创建ASP。现有数据库中的网络成员数据库结构

您将需要类似成员资格的东西,因为您将需要登录,您需要角色,这就是API成员资格的全部内容。它还使用了行业标准的存储等,这样你就不会通过自己滚动来给自己编一个安全漏洞。

然后,您可以使用web.config文件按角色限制单个页面,或者更常见的是整个文件夹(例如管理文件夹)。

好吧,只要在自己的数据库中注册成员资格和角色服务,如何调用数据库其实并不重要。它只需在没有任何参数的情况下运行aspnet_regsql命令提示符工具即可,它将启动一个向导(.net样式)来指导您完成这些服务的安装。它所做的只是在您想要的数据库中创建sql server对象(架构、表、存储过程等)现在,如果你不喜欢这些内置的提供者(尤其是我不喜欢),没有什么可以阻止你实现自己的提供者,这很简单,但可能是一个漫长的过程,因为根据你的方法或需求,你需要实现/覆盖大量的抽象或虚拟方法。你们两个选择来实现自己的。。。

  • 实现RoleProvider抽象抽象类或

  • SqlRoleProvider类扩展/继承,该类公开了许多虚拟方法和属性。

最新更新