我正在用 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/