我是django的新手,我真的很喜欢它的模块化结构,所以我决定利用它,把所有分离的功能放在不同的应用程序中。
现在我需要一种方法来打开和关闭这个应用程序的用户和管理员。用户选项面板看起来像这样:
<>之前[]博客---------------------[]标签[BUY]之前
在选中"blog"选项后,用户将在他的个人资料中获得该博客,在购买并选中"tagging"选项后,他将获得该博客的标签。
管理面板将有能力显示或隐藏一个应用程序从用户面板。
I wonder if:
- 有一个应用程序可以帮助我打开和关闭特定用户的应用程序
- ,如果不是-
- 对于这样的django应用,什么才是合适的"架构"?
- 可以在中间件中动态完成,还是应该在登录期间完成(从数据库检查可用的应用程序,打开它们,重定向到用户主页)? 对于这样的任务有什么建议吗?
谢谢,罗伯特。
我没有听说过任何这样的应用程序,但我不认为它会太难构建。
如果我要这样做,我会在每个应用程序的入口点放置权限检查。例如:
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()
我将避免尝试在中间件中这样做,因为如果我正确地理解了问题,我希望您(或者至少我希望我)最终将花费大量时间构建一个通用框架,该框架最终将具有与上述类似的检查。
有帮助吗?有什么需要我澄清的吗?