【问题标题】:Custom Authorization attribute with ASP.NET Identity具有 ASP.NET 标识的自定义授权属性
【发布时间】:2016-05-08 22:17:02
【问题描述】:

在我的 MVC5 项目中,管理员可以在控制面板中创建课程并将课程存储在数据库中(目前只有 2 个课程)。另一方面,我可以为这些课程创建一些角色,即 CanCreateMathHomework、CanCreateChemistryHomework,这样只有相关课程的教师才能使用 ASP.NET Identity 发布相关课程的作业。到目前为止,一切都很顺利,教师可以发布他们的课程作业。

LessonController:

[Authorize(Roles = "CanCreateMathHomework")]
public ActionResult CreateMathHw()
{
    //code omitted for brevity
}


[Authorize(Roles = "CanCreateChemistryHomework")]
public ActionResult CreateChemistryHw()
{
    //code omitted for brevity
}

但是,我想创建一个灵活的权限机制,让新创建课程的教师无需在数据库中创建新角色或在控制器中创建新操作即可发布他们的作业。我想要执行的是:

1) 管理员将继续创建新课程和课程教师,然后像以往一样将它们保存在数据库中。

2) 管理员将权限授予新创建课程的老师,以便他或她能够像其他老师一样发布他或她的课程内容。

3) 不需要在 Controller 中创建新的 Action 方法,所有事情都应该在不需要软件开发人员的情况下完成。

但是怎么做呢?可能吗?如果是这样,是否可以使用全局角色和操作方法来执行此操作?我真的很困惑,任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-identity asp.net-identity-2


    【解决方案1】:

    很遗憾,Authorize 无法按照您描述的方式工作。

    然而,aspnet 身份数据库(假设您有一个)将为用户、角色和其他此类有趣的身份验证信息创建表,因此您需要做的就是在这些 aspnet 表和“xhomework”表之间创建连接以链接将角色/用户添加到其他表中的项目。

    然后,您可以通过从现有的 Authorize 属性或其父属性派生来创建新属性(有关详细信息,请参阅此处:https://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute(v=vs.118).aspx

    ...

    这将为您提供一个“过滤器”,在执行操作之前应用到请求,允许您通过覆盖 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 来管理新的连接表。

    【讨论】:

    • 感谢您的解释。投票+
    • 如果它可以帮助您解决问题,您应该将其标记为问题的答案
    • 是的,你是对的。但是我的问题还没有解决,这就是为什么我没有将其标记为答案。对不起:(
    猜你喜欢
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    • 2020-04-11
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多