也许这更像是一个ASP.NET MVC问题,而不是Orchard问题,但我对这两个问题都比较新,而且在这两种情况下我都不知道答案。
ASP.NET MVC应用程序在技术上没有单一的入口点,所以我应该在每次有人访问任何页面时放置我想要始终运行的代码,无论层或原点是什么权限?是否有特定的Orchard方式来做到这一点?
如果它有所作为,我现在特别想要做的是限制可以访问我网站的IP范围。我想查看每个传入的请求,并检查用户是否经过身份验证,或者是否具有我在自定义设置中配置的允许范围内的IP。
我可以想到一些快速而肮脏的方法来实现这一点,比如检查dplyr::select()
并在我的所有区域周围设置一个条件或实现Layout
切换到另一个主题,但我&# 39;我喜欢这样做。
答案 0 :(得分:4)
要实现这一目标,您应该采取以下措施来实施新的IActionFilter
或IAuthorizationFilter
:
public class CheckAccessFilter : FilterProvider, IActionFilter, IAuthorizationFilter {
public void OnActionExecuting(ActionExecutingContext filterContext) {
// here you can check the incoming request, and how the system will deal with it,
// before executing the action
}
public void OnActionExecuted(ActionExecutedContext filterContext) {
}
public void OnAuthorization(AuthorizationContext filterContext) {
// here you can authorize any request
}
}
但是,如果您只想基于内容项目进行授权(例如:窗口小部件,页面,预测),则可以实施IAuthorizationServiceEventHandler
:
public class IPAuthorizationEventHandler : IAuthorizationServiceEventHandler {
public void Checking(CheckAccessContext context) {
}
public void Adjust(CheckAccessContext context) {
}
public void Complete(CheckAccessContext context) {
}
}
您可以遵循实施此方法的最佳示例是SecurableContentItemsAuthorizationEventHandler
,您可以在Orchard.ContentPermissions
模块中找到它。