【发布时间】:2010-10-28 20:22:45
【问题描述】:
我已经看到了对 similar question 的一个很好的回答,它解释了通过从一个用您自己的 ActionFilter 属性装饰的新基类继承所有控制器,您可以如何将一些逻辑应用于所有请求到您的网站。
我想根据我的用户正在访问的网站区域找到一种方法。
例如,我将有一个带有 View 操作的 Product 控制器,但我希望允许将其用于以下两个 url:
/Product/View/321 - 向“普通”用户显示产品 ID 321 /Admin/Product/View/321 - 使用相同的视图控制器,但为我的管理员用户提供额外的功能。
我可以将“admin”作为名为“user”的参数传递到我的产品控制器上的视图操作中,以向管理员显示额外信息,这样做的方法显示为 here。但是我需要做的是确认我的用户被允许查看该网址。我不想用检查身份验证的 ActionAttribute 来装饰我的 Product 控制器,因为当未经身份验证的用户(和登录的管理员)在 /Product/View/321 上查看它时,我希望他们都看到标准视图。
所以我喜欢做什么,下面用伪代码描述:
当调用格式为“{userlevel}/{controller}/{action}/{id}”的 url 时,我想调用另一个执行身份验证检查的控制器,然后 'chain ' 到原始的 {controller} 并传递 {action}、{id} 和 {userlevel} 属性。
我该怎么做?
(我知道对控制器的每次调用进行检查的开销可能很小。我想这样做是因为我以后可能需要做一些除了用户之外更昂贵的事情身份验证检查,我宁愿只为我网站的低流量 admin 区域运行该代码。似乎没有必要为网站的每个公共用户执行这些操作)
【问题讨论】:
标签: asp.net-mvc