Javascript 在AngularJS中实现授权

Javascript 在AngularJS中实现授权,javascript,angularjs,angularjs-directive,angularjs-scope,authorization,Javascript,Angularjs,Angularjs Directive,Angularjs Scope,Authorization,我想在AngularJS中实现授权。在我的项目中,这是一种社交媒体,不同的角色甚至相同的角色可能会以不同的方式查看一个视图文件 例如,假设我们有两个不同的角色:客户和公司 客户和公司在共享的视图文件中可能有不同的内容,例如,公司可以在其个人资料中显示费率,而客户不能。(不同的角色) 或者,一个客户可能会看到页面上的按钮,而另一个客户则看不到。(相同角色) 如您所见,我无法通过简单地检查角色来实现授权,在某些情况下,我需要与服务器通信 我有多种选择: 在控制器的作用域中创建一个具有相应权限的变量

我想在AngularJS中实现授权。在我的项目中,这是一种社交媒体,不同的角色甚至相同的角色可能会以不同的方式查看一个视图文件

例如,假设我们有两个不同的角色:客户和公司

客户和公司在共享的视图文件中可能有不同的内容,例如,公司可以在其个人资料中显示费率,而客户不能。(不同的角色)

或者,一个客户可能会看到页面上的按钮,而另一个客户则看不到。(相同角色)

如您所见,我无法通过简单地检查角色来实现授权,在某些情况下,我需要与服务器通信

我有多种选择:

  • 在控制器的作用域中创建一个具有相应权限的变量,默认值为false:

    $scope.auth={
    canRate:错,
    断开连接:错误
    };

    然后连接到服务器并根据响应更改auth对象的值。并在我的视图文件中使用
    ng if
    来显示或隐藏元素

  • 创建指令并向其传递逗号分隔的权限

    然后连接到服务器以检查权限。如果它们都为true,则显示元素

  • 使用
    resolve:{…}
    并在路由时从服务器获取所有必要的数据,这会增加每个页面的加载时间
我想知道有没有更好的方法来解决这个问题? 任何形式的帮助或评论都将不胜感激

注意:当然我有服务器端身份验证和授权!我只想根据用户角色或我解释过的其他条件在视图文件中显示一些元素。这些元素类似于按钮或链接,否则,我可以使用不同的视图来处理每种情况,而不是使用共享视图和隐藏元素


无论如何,我知道这种方法只用于显示目的,不能解决安全问题。

首先,我喜欢AngularJS。但是,像所有的web客户端框架一样,严格来说,您不能在AngularJS中实现授权。现在,在每个人都按下向下投票按钮之前,让我解释一下:

您不能信任web客户端对用户隐藏数据。如果服务器将数据发送到客户端,即使您使用
ng hide
避免显示数据,他们仍然可以找到查看数据的方法(例如使用fiddler)

因此,您必须在服务器端实现授权。现在,假设你这样做:

AngularJS非常适合根据从服务器接收的数据构建动态web界面。因此,您的服务器应该只发送您的客户端允许查看的数据。然后,您可以使用ng hide或ng if来避免显示可能会显示该数据的组件

此外,服务器甚至可以发送一个对象,其中包含用户可用的可能操作列表。然后,您可以在按钮中使用ng hide,以便在操作不可用时不显示它们


即使如此,您仍需要编写服务器端代码,以忽略不允许用户执行的操作。

首先,我喜欢AngularJS。但是,像所有的web客户端框架一样,严格来说,您不能在AngularJS中实现授权。现在,在每个人都按下向下投票按钮之前,让我解释一下:

您不能信任web客户端对用户隐藏数据。如果服务器将数据发送到客户端,即使您使用
ng hide
避免显示数据,他们仍然可以找到查看数据的方法(例如使用fiddler)

因此,您必须在服务器端实现授权。现在,假设你这样做:

AngularJS非常适合根据从服务器接收的数据构建动态web界面。因此,您的服务器应该只发送您的客户端允许查看的数据。然后,您可以使用ng hide或ng if来避免显示可能会显示该数据的组件

此外,服务器甚至可以发送一个对象,其中包含用户可用的可能操作列表。然后,您可以在按钮中使用ng hide,以便在操作不可用时不显示它们


即使如此,您仍需要对服务器端进行编码,以忽略不允许用户执行的操作。

您的方法可行,但不安全。我会确保服务器也能处理身份验证。就我个人而言,在使用AngularJS时,我总是使用基于服务器端令牌的身份验证系统


您应该让GET或POST请求要求登录时提供的令牌,而不是使用ng if。从那里,服务器可以确定是否允许请求成功,而不允许用户伪造凭据。您的两个示例都很好,但将它们用作仅出于显示目的而隐藏内容的手段。web客户端不会保护敏感信息的安全,也不会防止不需要的用户发出POST请求。

您的方法会起作用,但不安全。我会确保服务器也能处理身份验证。就我个人而言,在使用AngularJS时,我总是使用基于服务器端令牌的身份验证系统


您应该让GET或POST请求要求登录时提供的令牌,而不是使用ng if。从那里,服务器可以确定是否允许请求成功,而不允许用户伪造凭据。您的两个示例都很好,但将它们用作仅出于显示目的而隐藏内容的手段。web客户端不会保护敏感信息的安全,也不会防止不需要的用户发出POST请求。

有更好的方法可以使用本机angular router或ui router。搜索“oauth angular”并找到一些例子。似乎你不明白我的意思