django 如何根据 url 设置权限?

2017-12-01 19:37:44 +08:00
 zhiqiang

用 django 架设了一个简单的服务器,主要从本地文件抓数,然后显示出来。

在网上找了一下,django 的权限体系是基于 model 的。但我这个服务不存在 model。

我想简单地根据 url 来设置权限,比如用户组 a 可以访问 /a,用户组 b 只能访问 /b。有比较方便的方法吗?

4983 次点击
所在节点    Django
11 条回复
tinypig
2017-12-01 19:46:59 +08:00
在 View 里检查权限。
okletswin
2017-12-01 19:49:51 +08:00
view 级别处理,自己写装饰器,取出当前 request 的 user 和 url,拒绝或通过。
heww
2017-12-01 20:50:14 +08:00
用 middleware
Eds1995
2017-12-01 21:28:38 +08:00
中间件可以解决呀。
zhiqiang
2017-12-01 23:31:26 +08:00
@Eds1995 哪个中间件?
wenbinwu
2017-12-01 23:59:28 +08:00
写一个中间件,从 request 拿 user,从 path 里拿路径,然后自己决定怎么给权限
hu6360567
2017-12-02 00:16:01 +08:00
如果都是静态的,nginx 是不是更符合要求
guiqiqi
2017-12-02 03:51:48 +08:00
Django 我不太清楚,但是我前一段时间写了一个 Flask 基于 Flask 的用户权限管理插件,可以通过装饰器引用对于每个 url 实现用户组的权限设置,就是在来请求的时候拿里面用户的 cookie 检查,看对应的组 cookie 是不是具有相同权限 /更高权限的用户,如果是就继续交由路由函数处理,否则就 return 一个函数值,可以由装饰器传入参数指定。手机写的,比较乱,但希望对你有帮助。
KgM4gLtF0shViDH3
2017-12-02 09:56:53 +08:00
简单点就在控制器里面直接取出用户判断呗
zhiqiang
2017-12-02 17:30:58 +08:00
最后还是自定义了一个 User model 替代默认的 User,在里面添加 permission 来解决的。感觉比较丑。先这样吧。
yinzishao17
2018-01-09 20:02:22 +08:00
创建一个 Model   acl
```
id, app_label, model
'42', 'action', 'acl'
```
然后根据 url 生成相应的权限。
```
#auth_permission 表
id, name, content_type_id, codename
'123', 'trends list', '42', 'trends/list'
```
我是这样处理的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/411226

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX