V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zhiqiang
V2EX  ›  Django

django 如何根据 url 设置权限?

  •  
  •   zhiqiang · 2017-12-01 19:37:44 +08:00 · 4749 次点击
    这是一个创建于 2309 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    11 条回复    2018-01-09 20:02:22 +08:00
    tinypig
        1
    tinypig  
       2017-12-01 19:46:59 +08:00
    在 View 里检查权限。
    okletswin
        2
    okletswin  
       2017-12-01 19:49:51 +08:00
    view 级别处理,自己写装饰器,取出当前 request 的 user 和 url,拒绝或通过。
    heww
        3
    heww  
       2017-12-01 20:50:14 +08:00 via iPhone
    用 middleware
    Eds1995
        4
    Eds1995  
       2017-12-01 21:28:38 +08:00 via Android
    中间件可以解决呀。
    zhiqiang
        5
    zhiqiang  
    OP
       2017-12-01 23:31:26 +08:00
    @Eds1995 哪个中间件?
    wenbinwu
        6
    wenbinwu  
       2017-12-01 23:59:28 +08:00
    写一个中间件,从 request 拿 user,从 path 里拿路径,然后自己决定怎么给权限
    hu6360567
        7
    hu6360567  
       2017-12-02 00:16:01 +08:00 via Android
    如果都是静态的,nginx 是不是更符合要求
    guiqiqi
        8
    guiqiqi  
       2017-12-02 03:51:48 +08:00 via iPhone
    Django 我不太清楚,但是我前一段时间写了一个 Flask 基于 Flask 的用户权限管理插件,可以通过装饰器引用对于每个 url 实现用户组的权限设置,就是在来请求的时候拿里面用户的 cookie 检查,看对应的组 cookie 是不是具有相同权限 /更高权限的用户,如果是就继续交由路由函数处理,否则就 return 一个函数值,可以由装饰器传入参数指定。手机写的,比较乱,但希望对你有帮助。
    bestkayle
        9
    bestkayle  
       2017-12-02 09:56:53 +08:00 via Android
    简单点就在控制器里面直接取出用户判断呗
    zhiqiang
        10
    zhiqiang  
    OP
       2017-12-02 17:30:58 +08:00
    最后还是自定义了一个 User model 替代默认的 User,在里面添加 permission 来解决的。感觉比较丑。先这样吧。
    yinzishao17
        11
    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'
    ```
    我是这样处理的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   926 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 20:54 · PVG 04:54 · LAX 13:54 · JFK 16:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.