AngularJS和Django权限

2024-04-26 19:15:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用AngularJS和{a2}构建一个webapp。我想使用Django优秀的权限系统(主要是view权限),但我不确定如何在纯客户端实现它。在

我知道我可以使用Angular的$interpolate服务,但我不想将两个框架中的模板标记混合在一起,因为我知道这是一个糟糕的做法。在

我想实现这一点的方法是使用所有适当的用户权限从服务器返回JSON,如下所示:

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

之后,我只需根据用户权限使用Angular的ngIf销毁或重新创建{}的一部分。在

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

在我看来,客户端的一切都应该被认为是不安全的?在


Tags: django方法用户view模板truea2权限
1条回答
网友
1楼 · 发布于 2024-04-26 19:15:29

My question is how safe is this?

为了安全起见,Django不需要返回任何关于视图的数据,直到Django对权限进行后端检查。因为在客户端,恶意用户只需使用浏览器的JS控制台就可以将布尔值翻转为True。在

因此,基本上,客户端检查应该局限于简单地修改用户界面(例如,隐藏用户无权访问的资源的链接)。但是当Django服务器将数据返回给用户时,Django视图需要自己进行权限检查。在

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

是的,您可以让AngularJS从restapi获取具有权限的用户配置文件。它比用JSON数据填充Django模板的HTML提供了更好的组织。在

我个人所做的是,一旦用户登录,AngularJS获取用户配置文件,例如名、姓等,并附上一个名为“permissions”的字段,而不是booleans,我只传递用户拥有的权限的名称。在

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

因为它发送的HTTP字段数量较少,而不是通过所有的HTTP发送数据

底线:

  • 良好的用户界面和良好的用户体验
  • 在返回任何数据/页面之前,服务器端会进行安全检查
  • 只包含用户拥有的权限,无需通过大量权限公开它们= False
  • 避免用JSON数据填充HTML模板,必要时创建一个最小的Django视图来返回JSON数据

相关问题 更多 >