我想为我的应用程序编写一个自定义角色提供程序,它有现有的用户和角色表。我正在寻找一个参考,其中:
答案 0 :(得分:2)
可以在web.config中定义权限配置和提供者本身。要将权限应用于不同的子页面,只需通过web.config中的Location.System.Web.Authorization节点锁定内容页面(更多信息here)。
要创建自定义提供程序,只需继承(System.Web.Security)RoleProvider抽象类并实现所需的方法(典型的是IsUserInRole,GetUsersInRole和GetRolesForUser,尽管我的内存目前有点模糊什么Asp.Net开箱即用来进行基于角色的授权,所以你可能想要全部实现它们。更多信息here。
完成后,您可以在web.config中注册要使用的提供程序:
<configuration>
<system.web>
<roleManager enabled="true"
defaultProvider="YourRoleProviderHere">
<providers>
<add name="YourRoleProviderHere"
type="YourRoleProviderHere, YourRoleProviderAssembly"
description="Your totally awesome role provider"
/>
</providers>
</roleManager>
...
这会将您的应用设置为使用您的角色提供商,而且几乎没有任何工作,您就可以启动并运行。所有标准授权方法仍然有效(User.IsInRole),并且您已与Asp.Net集成。
答案 1 :(得分:0)
您也可以尝试使用HttpModule: - 修改示例应用程序中的代码,以便请求知道要请求的页面 - 显然您需要以下DbTables结构: - 这link将为您提供一个良好的开端
现在这个粗略的创建表语句将为您提供以下集合:
围绕这个想法的一些DDL SQL:
CREATE TABLE [User](
[UserId] [int] IDENTITY(1,1) NOT NULL,
[FirstName] [varchar](100) NOT NULL,
[SecondName] [varchar](100) NULL,
[LastName] [varchar](100) NOT NULL,
[DomainName] [varchar](100) NOT NULL,
[UserRoleId] [int] NOT NULL,
[Password] [nvarchar](100) NOT NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[UserRole](
[UsersRoleId] [int] IDENTITY(1,1) NOT NULL,
[RoleId] [int] NOT NULL,
[UserId] [int] NOT NULL
) ON [PRIMARY]
CREATE TABLE [ga].[Roles](
[RoleId] [int] IDENTITY(1,1) NOT NULL,
[RoleName] [varchar](50) NOT NULL,
[RoleDefinition] [varchar](1000) NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Page](
[PageId] [int] IDENTITY(1,1) NOT NULL,
[PageName] [varchar](200) NOT NULL,
[PageDescription] [varchar](max) NOT NULL,
[PageTitle] [varchar](50) NOT NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[PagePerUserRole](
[PageForRoleId] [int] IDENTITY(1,1) NOT NULL,
[UserRoleId] [int] NOT NULL,
[PageId] [int] NOT NULL
) ON [PRIMARY]
GO
基本相同,但会检查用户是否可以访问asp.net页面生命周期的某些早期事件 - 例如OnInit
后者更不正统 - 但我使用复杂的身份验证机制(使用3 -rd软件系统)编写了一个应用程序,它似乎在生产中工作了一段时间; )