0

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

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


   [ ] 博客
   ---------------------
   [ ] 标签  [购买]

在检查“博客”选项后,用户将在他的个人资料中获得该博客,在购买并检查“标记”后,他将获得该博客的标记。


管理面板将能够在用户面板中显示或隐藏应用程序。

我怀疑是否:

  1. 有一个应用程序可以帮助我为特定用户打开和关闭应用程序
  2. 如果不 -
    1. 对于这样的 django 应用程序,什么是合适的“架构”?
    2. 它可以在中间件中动态完成还是应该在登录期间完成(检查数据库中可用的应用程序,打开它们,重定向到用户主页)?
    3. 对这样的任务有什么建议吗?

谢谢,罗伯特

4

1 回答 1

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()

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

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

于 2011-08-03T07:24:35.427 回答