这是我的问题:
我正在授权用户完成他们的角色,一部分。
[Authorize(Roles = "Admin,...")]
public class ModulesController : Controller {
.....
}
模块控制器显示用户有权使用的模块列表。 (有很多模块,但用户只连接到其中的一部分)。有很多东西与模块耦合,比如问题,......
例如:Modules控制器的详细信息视图。
public ActionResult Details(int id) {
var mod = (from p in _db.Modules
where p.Mod_ID == id
select p).First();
return accessible(mod);
}
[NonAction]
public ActionResult accessible(Module p) {
if (MvcApplication.accessible(HttpContext.User, p.Mod_ID)) {
return View(p);
}
ViewData["delError"] = "Not Accessible";
return View("Error");
}
使用此代码,我检查此用户是否已连接到他请求查看其详细信息的指定模块。
我不喜欢这种方法,因为我并不总是在视图中返回Module
所以这里有很多重载方法,对于模块的子页面,比如问题,我也是需要检查该人是否正在查看他有权访问的模块的问题。
我想使用authorize属性执行此操作,该属性将从模块中获取ID,并且可以授予或拒绝对该特定模块的访问权限。我的问题是,当用户请求查看问题时,我需要用一些代码找出模块ID。有时,moduleID在url中,但情况并非总是如此。
我该怎么做?尝试使用属性会不会很好?或者我需要以不同的方式做到这一点吗?
修改:
我正在尝试在答案中提出建议,但我如何在控制器构造函数中获取routedata(如ID)?
答案 0 :(得分:2)
请参阅:Asp.net mvc authorize attribute integrated with a parameter
真的很沮丧,相关的搜索没有拿起这些东西......