gpt4 book ai didi

orchardcms - 我应该在哪里放置我希望始终为每个请求运行的代码?

转载 作者:行者123 更新时间:2023-12-02 08:18:06 26 4
gpt4 key购买 nike

也许这更像是一个 ASP.NET MVC 问题而不是一个 Orchard 问题,但我对这两个问题都比较陌生,我不知道这两种情况的答案。

ASP.NET MVC 应用程序在技术上没有单一入口点,所以我应该在哪里放置我希望每次有人访问任何页面时始终运行的代码,而不管层、源或权限如何?有没有特定的 Orchard 方法可以做到这一点?

如果它有所作为,我现在特别想做的是限制可以访问我的网站的 IP 范围。我想查看每个传入请求,并检查用户是否已通过身份验证或是否具有我在自定义设置中配置的允许范围内的 IP。

我可以想出一些快速而肮脏的方法来实现这一点,比如将检查放在 Layout 中并在我的所有区域周围包装一个条件,或者实现 IThemeSelector 以切换到一个不同的主题,但我想正确地做。

最佳答案

要实现这一点,您应该做的就是实现新的 IActionFilterIAuthorizationFilter,如下所示:

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
}
}

但是如果您只想根据内容项(例如:Widgets、Pages、Projections)进行授权,您可以实现IAuthorizationServiceEventHandler:

public class IPAuthorizationEventHandler : IAuthorizationServiceEventHandler {
public void Checking(CheckAccessContext context) {
}

public void Adjust(CheckAccessContext context) {
}

public void Complete(CheckAccessContext context) {
}
}

实现此方法的最佳示例是 SecurableContentItemsAuthorizationEventHandler,您可以在 Orchard.ContentPermissions 模块中找到它。

关于orchardcms - 我应该在哪里放置我希望始终为每个请求运行的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40017630/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com