如何扩展OrchardCMS以显示/隐藏intranet和internet用户的导航和内容



我有一些页面,我希望只有在给定IP范围内访问网站的用户才能访问这些页面。对于所有其他用户,这些页面应该是不可访问的,并且它们各自的链接在菜单/导航中不可见。

我是OrchardCMS的新手,有人能为我提供一些一般指导并为我指明正确的方向吗?

有两个方面可以回答您的问题。

1.要检查对果园内容项和与其相关的菜单项的访问:

为了实现这一点,您可以实现新的IAuthorizationServiceEventHandler来取代默认的基于角色的授权服务,对您来说最好的示例是ContentMenuItemAuthorizationEventHandler,您可以在Orchard.ContentPicker模块下找到它,我包含了一个示例代码来解释这个处理程序的用法:

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.检查对某些操作的访问权限

为了实现这一点,您可以实现新的IAuthorizationFilter来检查对系统中某些操作的访问:

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

@mdameer提到的解决方案还可以,但在使用容器、列表、投影等时会遇到困难。

我有一个类似的任务,但有日期和时间范围。查看我对任务的问答,了解如何通过自定义部件解决此问题:

如何跳过在Orchard CMS中显示内容项目?

最新更新