Javascript 在AngularJS中实现授权
我想在AngularJS中实现授权。在我的项目中,这是一种社交媒体,不同的角色甚至相同的角色可能会以不同的方式查看一个视图文件 例如,假设我们有两个不同的角色:客户和公司 客户和公司在共享的视图文件中可能有不同的内容,例如,公司可以在其个人资料中显示费率,而客户不能。(不同的角色) 或者,一个客户可能会看到页面上的按钮,而另一个客户则看不到。(相同角色) 如您所见,我无法通过简单地检查角色来实现授权,在某些情况下,我需要与服务器通信 我有多种选择:Javascript 在AngularJS中实现授权,javascript,angularjs,angularjs-directive,angularjs-scope,authorization,Javascript,Angularjs,Angularjs Directive,Angularjs Scope,Authorization,我想在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”并找到一些例子。似乎你不明白我的意思