我有一些页面,我希望只有在给定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中显示内容项目?