2

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

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

我知道我可以访问 razor 来限制页面部分的访问,但是这会给 Angularjs 带来什么问题,混合 razor 和 Angular 视图语法是否是个好主意?

在我过渡到 Angularjs 的过程中,我在思考如何处理这个问题时遇到了问题。

4

3 回答 3

0

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

我现在没有很好的例子,但它可能会让你走上正确的道路?

使用淘汰赛,我使用模板引擎从 MVC 中检索部分视图。

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

于 2014-10-16T15:38:58.130 回答
0

其中一种方法需要设置一个服务来检查用户是否被授权访问页面(角度),然后在路由上设置参数

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

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

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

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

在从表单中添加/删除输入的情况下,也许您还可以通过某种方式在您创建的服务中处理此问题,然后根据访问级别对元素进行 ng-show/hide。

在谷歌上快速搜索“Angular 中基于角色的访问控制”会找到大量有用的教程/文章。

看到这个

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

于 2014-10-16T16:18:52.637 回答
0

你需要从两方面考虑:

  1. 保护您的 API (ASP.NET Web API)
  2. 使用安全/角色信息来呈现适当的 UI(可用选项和路由、启用/禁用元素等 -> AngularJS)

您应该假设 API 客户端是恶意的 - 它们不一定是您的应用程序。

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

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

如果您愿意,可以将 MVC 视图用作 AngularJS 模板,尽管我倾向于看不到布局之外的许多优点。

于 2017-10-13T19:33:07.107 回答