Django应用程序为特定用户"switch on"其他应用程序



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

现在我需要一种方法来打开和关闭这个应用程序的用户和管理员。用户选项面板看起来像这样:


<>之前[]博客---------------------[]标签[BUY]之前

在选中"blog"选项后,用户将在他的个人资料中获得该博客,在购买并选中"tagging"选项后,他将获得该博客的标签。


管理面板将有能力显示或隐藏一个应用程序从用户面板。

I wonder if:

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

谢谢,罗伯特。

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

如果我要这样做,我会在每个应用程序的入口点放置权限检查。例如:

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

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

有帮助吗?有什么需要我澄清的吗?

相关内容

  • 没有找到相关文章

最新更新