在我的MVC5项目中,管理员可以在控制面板中创建课程,课程存储在数据库中(目前只有2节课)。另一方面,我可以为这些课程创建一些角色,即CanCreateMathHomework,CanCreateChemistryHomework,这样只有相关课程的教师才能通过使用ASP.NET标识发布相关课程的作业。到目前为止,一切都很完美,教师可以发布他们课程的作业。
LessonController:
[Authorize(Roles = "CanCreateMathHomework")]
public ActionResult CreateMathHw()
{
//code omitted for brevity
}
[Authorize(Roles = "CanCreateChemistryHomework")]
public ActionResult CreateChemistryHw()
{
//code omitted for brevity
}
但是,我想创建一个灵活的权限机制,让新创建的课程的教师在不创建数据库中的新角色或Controller中的新操作的情况下发布其作业。我想要表现的是:
1)管理员将继续创建新课程和课程老师,然后将其保存在数据库中。
2)管理员向教师授予新创建的课程,以便他或她能够作为其他教师发布他或她的课程。
3)不需要在Controller中创建新的Action方法,一切都应该在不需要软件开发人员的情况下完成。
但是怎么样?可能吗?如果是这样,是否可以使用全局角色和Action方法来执行此操作?我真的非常困惑,任何帮助将不胜感激。感谢。答案 0 :(得分:1)
不幸的是,Authorize无法按照您描述的方式工作。
然而,aspnet身份数据库(假设您有一个)将处理为用户,角色和其他此类有趣的身份验证信息创建表,因此您需要做的就是在这些aspnet表和您的" xhomework&#之间创建联接34;用于将角色/用户链接到其他表中的项目的表。
然后,您可以通过从现有的Authorize属性或其父项派生来创建新属性(有关详细信息,请参阅此处:https://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute(v=vs.118).aspx)
...
这会给你一个"过滤器"在Action执行之前应用于请求,允许您通过覆盖OnAuthorization来拒绝您自己的安全术语(请参阅此处:https://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute.onauthorization(v=vs.118).aspx#M:System.Web.Mvc.AuthorizeAttribute.OnAuthorization(System.Web.Mvc.AuthorizationContext))
...从那里你只需要一个UI来管理新的连接表。