Django应用程序为特定用户“打开”其他应用程序

时间:2011-08-03 06:36:54

标签: django django-apps

我是django的新手,我非常喜欢它的模块化结构,所以我决定利用它并将所有独立的功能分别放在不同的app中。

现在我需要一种方法来管理用户和管理员打开和关闭这些应用程序。 用户选项面板如下所示:


   [ ] blog
   ---------------------
   [ ] tagging  [BUY]

检查“博客”选项后,用户可以在他的个人资料中获取博客,购买并检查“标记”后,他会为博客添加标记。


管理员面板可以显示或隐藏用户面板中的应用。

我想知道是否:

  1. 有一个应用程序可以帮助我打开和关闭specyfic用户的应用程序
  2. 如果没有 -
    1. 这种django应用程序的正确“架构”是什么?
    2. 可以在中间件中动态完成,还是应该在登录时完成(从数据库中检查可用的应用程序,打开它们,重定向到用户主页)?
    3. 有关此类任务的任何建议吗?
  3. 谢谢, 罗伯特

1 个答案:

答案 0 :(得分:0)

我没有听说过任何这样的应用程序...但我不认为它会太难建立。

如果我这样做,我会在每个应用的入口点进行权限检查。例如:

check_app_permission = lambda request: permissions.check_app_permission("blog", request)

def view_blog(request, …):
    check_app_permission(request)
    …

(甚至有可能做一些魔术并在urls.py级别注入此检查......)

此外,我还会创建一个has_app_permission模板标记:

<div id="sidebar">
    {% if has_app_permission "blog" %}
        {% include "blog/sidebar_recent_posts.html" %}
    {% endif %}
</div>

或类似。

最后,您可以实施权限系统的方式大约有一百万......而且如果没有更多信息,我将无法发表评论。但最简单的是:

class App(Model):
    name = CharField(…)

class AppPermission(object):
    app = ForeignKey(App)
    user = ForiegnKey(User)

def user_has_permission(user, app_name):
    return AppPermission.objects.filter(app__name=app_name, user=user).exists()

我会避免尝试用中间件来做这件事,因为如果我正确地理解了这个问题,我希望你会(或者,至少,我希望我会)花费大量时间来构建一个通用框架,最后,只会有与上述类似的检查。

这有帮助吗?有什么我可以澄清的吗?