2

我想为我的应用程序编写一个自定义角色提供程序,它具有现有的用户和角色表。我正在寻找一个参考,其中:

  • 不需要 machine.config 更改(我在自定义角色架构中看到了很多),
  • 支持可应用于需要不同权限的子页面的母版页。
4

2 回答 2

2

权限的配置和提供者本身可以在 web.config 中定义。要将权限应用于不同的子页面,您只需通过 web.config 中的 Location.System.Web.Authorization 节点锁定内容页面(更多信息在这里)。

要创建自定义提供程序,您只需从 (System.Web.Security)RoleProvider 抽象类继承并实现您需要的方法(通常是 IsUserInRole、GetUsersInRole 和 GetRolesForUser,尽管我现在对 Asp. Net 开箱即用地调用基于角色的授权,因此您可能希望全部实现它们)。更多信息在这里

完成后,在 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 集成。

于 2009-03-07T19:09:47.920 回答
0

您也可以尝试使用HttpModule: - 修改示例应用程序中的代码,以便请求知道要请求哪个页面 - 显然您需要以下 DbTables 结构: - 此链接将为您提供一个良好的开始

现在这个粗略的创建表语句将为您提供以下集合:

  • 每个用户将拥有一个或多个 UserRoles
  • 每个页面都可以配置为每个 UserRole 访问

围绕这个想法的一些 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

CustomBaseClass

基本相同,但会检查用户是否有权访问 asp.net 页面生命周期的一些非常早期的事件 - 例如 OnInit

后者是更非正统的方式 - 但我已经使用复杂的身份验证机制(使用 3-rd 软件系统)编写了一个应用程序,它似乎在生产中工作了一段时间;)

于 2009-05-18T19:13:47.843 回答