2010-03-15 4 views
0

sur le projet je travaille nous avons un site (le front office) qui est accessible par des utilisateurs anonymes, et un sous-site (le back office) dont l'accès est restreint. Dans le back office, je souhaite limiter l'accès à une page spécifique (par exemple, /Pages/specificpage.aspx) uniquement aux utilisateurs membres d'un certain groupe.Comment définir des autorisations spécifiques?

Comment puis-je faire par programme?

Merci.

Répondre

2

Vous devez d'abord créer un groupe pour ce type d'autorisation. Vous le faites à partir de la page "Personnes et groupes".
Ensuite, vous allez dans votre liste de pages en accédant au http:/Pages.
Cliquez sur le menu déroulant sur la page/l'article en question et sélectionnez «gérer les autorisations». Dans le menu Actions, sélectionnez "Modifier les autorisations" et cliquez sur OK pour interrompre l'héritage.
Supprimez les autorisations (héritées) par défaut (utilisateur/groupes) en cochant la case et sélectionnez Actions> Supprimer les autorisations utilisateur.
Dans le menu Nouveau, sélectionnez "Ajouter des utilisateurs", entrez le nom de votre groupe, sélectionnez les autorisations souhaitées et cliquez sur OK.

Et voici comment le faire programme:

using (SPSite site = new SPSite("<YOUR URL>")) 
{ 
    using (SPWeb web = site.OpenWeb()) 
    { 
    // Get the group you want to assign to the item 
    SPGroup group = web.Groups["<YOUR GROUP NAME>"]; 
    SPPrincipal principal = group as SPPrincipal; 

    // Define the role definitions 
    SPRoleDefinitionCollection roleDefinitions = web.RoleDefinitions; 
    SPRoleDefinition[] rolesToApply = new SPRoleDefinition[1] { roleDefinitions["Contribute"] }; 
// Or whatever role definition you want to assign 

    SPRoleAssignment newRoleAssignmentToAdd = new SPRoleAssignment(principal); 
    foreach (SPRoleDefinition roleDefinition in rolesToApply) 
    { 
     if (roleDefinition != null) 
     { 
     newRoleAssignmentToAdd.RoleDefinitionBindings.Add(roleDefinition); 
     } 
    } 

    // Choose your list 
    SPList list = web.Lists["Pages"]; 

    // Query for the item/file/page 
    SPQuery query = new SPQuery(); 
    query.RowLimit = 2000; 
    query.ViewFields = "<FieldRef Name='Title' />"; 
    query.Query = string.Format(@"<OrderBy><FieldRef Name='ID'/></OrderBy> 
            <Where> 
             <Eq> 
              <FieldRef Name='FileLeafRef'/> 
              <Value Type='Text'>{0}</Value> 
             </Eq> 
            </Where>", "<YOUR PAGE NAME>"); 

    // Get the list item 
    SPListItemCollection items = list.GetItems(query); 

    if (items.Count > 0) 
    { 
     SPListItem item = items[0]; 

     // If the item doesn't have unique permissions, set it to have that 
     if (!item.HasUniqueRoleAssignments) 
     { 
     item.BreakRoleInheritance(false); 
     } 

     // Add your role definition 
     item.RoleAssignments.Add(newRoleAssignmentToAdd); 
    } 
    } 
} 
+0

Merci pour votre réponse. Mais j'ai oublié de mentionner que je veux réaliser cela par programme. –

+0

Ok, j'ai ajouté un exemple de code. –

+0

Merci beaucoup, je vais l'essayer après avoir ajouté ce commentaire;) –

0

Pour définir les autorisations pragmatiquement que vous devez faire ce qui suit.

1) Casser Rôle héritage de l'élément 2) Ajouter la nouvelle attribution de rôle

Pour briser l'héritage de rôle de rupture d'un élément que vous appelez la méthode BreakRoleInheritance sur l'élément, en passant vrai copiera les autorisations actuelles pour la liste à l'article. Vous devez ensuite obtenir la collection d'attributions de rôles et ajouter une nouvelle attribution de rôle à celle-ci. L'attribution de rôle est créée pour un SPPrincipal et a un SPRoleDefinition lié à celui-ci.

SPRoleAssignmentCollection rolesAssignments = item.RoleAssignments; 

SPRoleAssignment userRoleAssignment = new SPRoleAssignment(principal); 
userRoleAssignment.RoleDefinitionBindings.Add(roleDefinition); 

rolesAssignments.Add(userRoleAssignment); 

Pour récupérer une définition de rôle, vous pouvez aller à la propriété SPWeb actuelle FirstUniqueRoleDefinitionWeb si vous gardez les customisations qui ont été apportées à vos autorisations sites, puis utilisez Collection Définitions Le rôle du SPWeb. (Je ne suis pas trop sûr du motif d'élimination pour la propriété FirstUniqueRoleDefinitionWeb, si vous utilisez SPContext Ne le disposer)

if (web.FirstUniqueRoleDefinitionWeb != null) 
{ 
    using (SPWeb firstUniqueRoleDefinitionWeb = web.FirstUniqueRoleDefinitionWeb) 
    { 
     return firstUniqueRoleDefinitionWeb.RoleDefinitions[roleName]; 
    } 
} 
return web.RoleDefinitions[roleName]; 

espoir que cela vous aide dans la bonne direction

Questions connexes