使用Angularjs和mvc5(.net)处理访问控制的正确方法是什么?

时间:2014-10-16 15:29:50

标签: angularjs asp.net-mvc-5 role-based-access-control

我目前正在为一个需要基于角色的访问控制逻辑的应用程序学习Angularjs。在某些情况下,必须使用逻辑来根据您的用户角色限制对某些页面的访问。在其他情况下,我将不得不根据用户角色限制对表单的某个部分或表单上的某些字段的访问。如果Angularjs是一种客户端方法,如果我不希望客户端访问他们不认为可以访问的项目,那么这似乎就会出现问题。

在不干扰Angularjs的情况下,从服务器处理这些场景的当前方法是什么?

我知道我可以访问razor来限制页面部分访问,但是这会给Angularjs带来什么问题,并且这是混合剃刀和角度视图语法的好主意吗?

在我转向Angularjs的过程中,我遇到了一个问题,即如何解决这个问题。

3 个答案:

答案 0 :(得分:0)

您可以使用MVC中的ajax请求视图,并使用响应处理任何访问限制。

我现在没有好的例子,但它可能会让你以正确的方式出现?

使用knockout我使用了一个模板来从MVC中检索部分视图。

同样的事情应该在这里工作,你可以保持服务器端的访问限制(你应该)。

答案 1 :(得分:0)

其中一种方法需要设置服务以检查用户是否有权使用该页面(以角度为单位),然后在路径上设置参数

{
    "/admin": {
        templateUrl: 'partials/admin.html', 
        controller: 'AdminCtrl', 
        requireLogin: true//THIS
}

然后通过处理 $ locationChangeStart 事件取消在控制器中的导航

(这些都显示在我发布的文章中。)

我的建议是为每个逻辑页面元素创建具有单独控制器的视图,并以与示例相同的方式处理访问。而不是每页,它将是每个视图。

如果在表单中添加/删除输入,可能会有一些方法可以在您创建的服务中处理此内容,然后根据访问级别显示/隐藏元素。

快速谷歌搜索“Angular中基于角色的访问控制”将获得大量有用的教程/文章。

请参阅This

This (更深入地使用相同的例子)

答案 2 :(得分:0)

您需要分两部分来考虑:

  1. 保护您的API(ASP.NET Web API)
  2. 使用安全/角色信息呈现适当的UI(可用选项和路线,启用/禁用元素等等 - > AngularJS)
  3. 您应该假设API客户端是恶意的 - 它们不一定是您的应用程序。

    在身份验证/授权选项方面:HTTP标头令牌(例如JWT)是常见选项,但仅HTTP cookie仍然是一个不错的选择,特别是如果您的客户端都是基于Web的。 JWT的另一个优点是您可以允许客户端(AngularJS)读取有效负载,并轻松共享有关允许用户访问的信息。如果您使用cookie,通常必须以其他方式提供该信息(例如,服务器端注入或API调用)。

    如何生成令牌/ cookie(以及它们在声明中包含的内容)取决于您需要如何对人员进行身份验证。它可以是您自己的ASP.NET MVC登录表单,如果需要,凭据存储在数据库中。

    如果您愿意,可以将MVC视图用作AngularJS模板,但我不会看到除布局之外的许多优点。