所以当用户登录时,我正在阅读有关登录循环的另一个问题,设置返回到登录后可能无法访问的URL(即管理页面,用户使用普通帐户登录) .
WebForms下的解决方案似乎是使用UrlAuthorizationModule.CheckUrlAccessForPrincipal方法.但是,对于使用授权属性保护的操作方法的URL不起作用.我想我可以计算出URL所指向的方法,并反映出来解决我的问题 – 但是我似乎无法解决如何从路由表中获取这些信息.
任何人曾经与此合作过,还是为此做出了解决方案?如果我可以从URL获取路由信息,我想我可以工作的其余部分,但如果有人有一个通用的解决方案 – 即.一些隐藏的方法类似于前面提到的一个MVC,那么那将是完全令人敬畏的.
我不是问如何检查用户是否访问指定的Controller / Action对.我首先需要解决如何从RouteTable中获取Controller / Action对.所有背景故事的原因是,确实存在与UrlAuthorizationModule.CheckUrlAccessForPrincipal相当的MVC.
解决方法
你想解决什么问题?听起来,您可能会走向一条可以使用简单解决方案的复杂解决方案的路径.
如果用户在登录后没有访问该页面的权限,是否希望未登录的用户访问一个页面,而登录用户访问其他页面?
如果是这种情况,我可能会试图为这种情况创建另一个控制器,并在用户无权访问的任何地方重定向到该控制器.或者如果您使用自己的基本控制器,我将把功能放在那里.
然后控制器可以呈现所需的视图.例如,如果未登录的用户尝试访问页面,则可能会将其重定向到通用错误页面.如果用户登录,他们可能会被重定向到一个未授权的页面.
这与罗伯特的答案非常相似.
这是基本控制器的基本框架.
public BaseController: Controller { ... // Some code public ActionResult DisplayErrorPage() { // Assumes you have a User object with a IsLoggedIn property if (User.IsLoggedIn()) return View("NotAuthorized"); // Redirect user to login page return RedirectToAction("logon","Account"); } }
然后让我们说一个AdminController(从BaseController继承)的动作
public ActionResult HighlyRestrictedAction() { // Assumes there is a User object with a HasAccess property if (User.HasAccess("HighlyRestrictedAction") == false) return DisplayErrorPage(); // At this point the user is logged in and has permissions ... }