【发布时间】:2011-01-14 00:02:35
【问题描述】:
这是我的问题:
我正在授权用户使用他们的角色,其中一部分。
[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,所以这有很多重载方法,对于模块的子页面,比如问题,我还需要检查此人是否正在查看他有权访问的模块的问题。
我想使用授权属性来执行此操作,该属性将从模块中获取 ID,并通过该属性授予或拒绝对该特定模块的访问权限。我的问题是,当用户请求查看问题时,我需要使用一些代码找出模块 ID。有时 moduleID 在 url 中,但并非总是如此。
我该怎么做?尝试使用该属性会很好吗?还是我需要以不同的方式执行此操作?
编辑:
我正在尝试答案中的建议,但是如何在控制器构造函数中获取路由数据(如 ID)?
【问题讨论】:
标签: asp.net-mvc attributes authorization