2016-08-01 2 views
2

J'ai certaines pages que je veux accessibles uniquement aux utilisateurs qui accèdent au site à partir d'une plage IP donnée. Pour tous les autres utilisateurs, ces pages doivent être inaccessibles, et leurs liens respectifs ne sont pas visibles dans le menu/navigation.Comment étendre OrchardCMS pour afficher/masquer la navigation et le contenu de l'intranet par rapport aux utilisateurs d'Internet

Je suis nouveau à OrchardCMS, quelqu'un peut-il donner des conseils généraux et me diriger dans la bonne direction?

+0

Commander [ce fil] (http://stackoverflow.com/questions/11879500/how-to -limit-page-access-only-to-localhost) – devqon

+0

devqon, je sais comment le faire dans dot.net, ce n'est pas une question de syntaxe. La question est comment puis-je étendre vergerCMS pour aboutir à ce comportement. Merci! – NoCarrier

Répondre

3

Il y a deux aspects pour répondre à votre question.

1. Pour vérifier l'accès aux verger éléments de contenu et un élément de menu par rapport à lui:

Pour ce faire, vous pouvez mettre en œuvre de nouveaux IAuthorizationServiceEventHandler pour remplacer les rôles par défaut le service d'autorisation en fonction, le meilleur échantillon pour vous est ContentMenuItemAuthorizationEventHandler que vous pouvez trouver dans le module Orchard.ContentPicker, j'inclus un exemple de code pour expliquer l'utilisation de ce gestionnaire:

public class CustomAuthorizationEventHandler : 
    IAuthorizationServiceEventHandler{ 

    public ContentMenuItemAuthorizationEventHandler() { 
    } 

    public void Checking(CheckAccessContext context) { } 
    public void Adjust(CheckAccessContext context) { 
     //Here you can put your business to grant user or not 
     context.Granted = true; //Roles service will look to this value to grant access to the user 
     context.Adjusted = true; 
    } 

    public void Complete(CheckAccessContext context) {} 
} 

2. pour vérifier l'accès à certaines actions.

Pour ce faire, vous pouvez mettre en œuvre une nouvelle IAuthorizationFilter pour vérifier l'accès à certaines actions dans votre système:

public class CustomAuthorizationFilter : FilterProvider, IAuthorizationFilter { 
    public void OnAuthorization(AuthorizationContext filterContext) { 
     if (!Granted) { 
      filterContext.Result = new HttpUnauthorizedResult(); 
     } 
    } 
} 
1

Les solutions mentionnées par @mdameer sont ok, mais vous rencontré des difficultés lors de l'utilisation des conteneurs, listes, projections et autres.

J'ai eu une tâche similaire mais avec des plages horaires. Voir ma question et répondre à la tâche pour avoir une idée comment aborder ce par une partie personnalisée:

How to skip displaying a content item in Orchard CMS?