Вы также можете попробовать использовать HttpModule :
- Измените код в примере приложения, чтобы запрос знал, какая страница должна быть запрошена - очевидно, вам потребуется следующая структура DbTables:
- Эта ссылка даст вам хорошее начало
Теперь эти грубые операторы создания таблицы дадут вам следующий набор:
- каждый пользователь будет иметь одну или несколько пользовательских ролей
- каждая страница будет настраиваемой для доступа к каждой пользовательской роли
Некоторые 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-ю программную систему), и оно, кажется, работает некоторое время в производстве; )