javascript - AngularJS 和 Django 权限

标签 javascript python angularjs django

我正在用 AngularJS 构建一个网络应用程序和 Django .我想使用 Django 的优秀权限系统(主要是 view 权限),但我不确定如何在纯客户端中实现它。

我知道我可以使用 Angular 的 $interpolate 服务,但我不想混合使用来自两个框架的模板标签,因为我知道这是一种不好的做法。

我想要实现它的方式是从服务器返回具有所有适当用户权限的 JSON,例如:

{
 "username": "John",
 "can_view_field1": True,
 "can_view_field2": True,
 "can_view_field3": False
}

之后,我将简单地使用 Angular 的 ngIf 根据用户许可销毁或重新创建部分 DOM

我的问题是这有多安全?有没有更好的方法可以在不使用 od Django 模板的情况下做到这一点?

在我看来,所有客户端的东西都应该被认为是不安全的?

最佳答案

My question is how safe is this?

为了安全起见,在 Django 对权限进行后端检查之前,Django 需要不返回任何有关 View 的数据。因为在客户端,恶意用户可以简单地使用浏览器的 JS 控制台将该 bool 值翻转为 True。

所以基本上,客户端检查应该仅限于简单地更改用户界面(例如,隐藏指向用户无权访问的资源的链接)。但是当 Django 服务器向用户返回数据时,Django View 需要自己进行权限检查。

Are there any better ways of doing this without the use of Django's templates?

是的,您可以让 AngularJS 使用来自 REST API 的权限获取用户配置文件。与使用 JSON 数据填充 Django 模板的 HTML 相比,它为您提供了更好的组织。

我个人的做法是,一旦用户登录,AngularJS 就会获取用户配置文件,例如first_name、last_name 等,我附加了一个名为“permissions”的字段,而不是 bool 值,我只是传递用户拥有的权限的名称。

profile.permissions = ['view_app1', 'view_app2', 'create_model_1', ...]

因为通过 HTTP 发送的数据比发送包含大量 x=False 字段的所有权限要少

底线:

  • 客户端检查只是为了良好的用户体验和良好的用户界面
  • 在返回任何数据/页面之前在服务器端进行安全检查
  • 仅包含用户拥有的权限,无需公开所有具有大量权限的权限 = False
  • 避免使用 JSON 数据填充 HTML 模板,创建一个最小的 Django View 以在必要时返回该 JSON 数据

关于javascript - AngularJS 和 Django 权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34460363/

相关文章:

node.js - 在Windows 7上安装Ionic Framework时出错

javascript - 我有一个包含小数点的字符串,例如 "10.00"我想使用 jQuery 隐藏它?

javascript - 在 React Component 中返回结束标签和开始标签?

python - 在 PyMC3 中运行多变量有序 logit

angularjs - 使用 Angular 设置 Karma/Jasmine 时出现问题

javascript - 为 Android 构建 Ionic 时出现 "CALL_AND_RETRY_LAST Allocation failed"错误

javascript - jQuery 通过复选框和单击来过滤项目

javascript - 当同时注入(inject)数据时,异步数据在 Material 底板组件中不可用

python - 如何在Python中连续连接子列表中的一对坐标?

python - “FriendshipRequest”对象没有属性 'META'