2009-03-07 9 views
2

Je souhaite écrire un fournisseur de rôles personnalisé pour mon application, qui comporte des tables d'utilisateurs et de rôles. Je suis à la recherche d'une référence à ce sujet, qui:Création d'un fournisseur de rôles personnalisés pour les pages maîtres/No Machine.Config

  • ne nécessite pas de changement de machine.config (je vois beaucoup dans les architectures de rôle personnalisé),
  • prend en charge les pages maîtres qui peuvent être appliquées à l'enfant pages qui nécessitent des droits différents.

Répondre

2

La configuration des droits et le fournisseur lui-même peuvent être définis dans web.config. Pour appliquer les droits à différentes pages enfants, il vous suffit de verrouiller les pages de contenu via le nœud Location.System.Web.Authorization dans web.config (plus d'infos here). Pour créer un fournisseur personnalisé, vous devez simplement hériter de la classe abstraite (System.Web.Security) RoleProvider et implémenter les méthodes dont vous avez besoin (typiquement IsUserInRole, GetUsersInRole et GetRolesForUser, bien que ma mémoire soit un peu brumeuse pour le moment). à ce qu'Asp.Net appelle hors de la boîte pour faire l'autorisation basée par rôle, ainsi vous pourriez vouloir les implémenter tous). Plus d'infos here.

Une fois cela fait, vous vous inscrivez fournisseur à utiliser dans 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> 
    ... 

qui définira votre application pour utiliser votre fournisseur de rôle, et pratiquement pas de travail, vous êtes opérationnel . Toutes les méthodes d'autorisation standard fonctionnent toujours (User.IsInRole) et vous êtes intégré à Asp.Net.

+0

Dois-je utiliser les contrôles de connexion intégrés sur mon site ou puis-je ajuster les rôles dans le code existant? – Caveatrob

0

Vous pouvez aussi utiliser HttpModule: - Modifier le code dans l'exemple d'application de sorte que la demande ne sait quelle page doit être demandée - évidemment vous auriez besoin de la structure DBTables suivante: - Ce link vous donnera un bon départ

maintenant, ce rugueux créer des déclarations de table vous donnerait l'ensemble suivant:

  • chaque utilisateur aura un ou plusieurs UserRoles
  • chaque page sera CONFIGUR peut être consulté par UserRole

Certains DDL SQL autour de l'idée:

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 

OU CustomBaseClass

fondamentalement la même, mais vérifierait si l'utilisation a accès à un événement très précoce de la Le cycle de vie de la page asp.net - tel que OnInit

Ce dernier est de manière plus peu orthodoxe - mais j'ai écrit une application en utilisant un mécanisme d'authentification compliqué (en utilisant le 3-ème logiciel) et il semble fonctionner pendant un certain temps dans la production;

Questions connexes