0

我正在尝试在我的网站上设置 django-filer。我不知道如何让 URLS 与网站上的管理站点分开。

本地主机:8000/admin/filer/文件夹/

是它现在想去的地方,这当然需要有人在 /admin 部分拥有完整的管理员访问权限。我希望他们只有文件管理器访问权限并能够查看该站点。我的基本 urls.py 为:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('accounts/', include('accounts.urls')), # new
    path('accounts/', include('django.contrib.auth.urls')), 
    path('filer/', include('filer.server.urls')),
]

去 localhost:8000/filer 什么都不做?我希望我能够在我的 django 网站上创建一个本地的小保管箱功能,注册用户可以在其中使用它,尽管他们不必是 /admin 中的管理员

这甚至可能吗?我根本没有在文件管理器的文档中看到它?

4

1 回答 1

2

当我查看django-filer的源代码时,我觉得在 Django Admin 之外重新实现这些类型的操作将非常困难。

所以,我想实现一个不同的解决方案......允许非员工用户访问 Django 管理员,但仅限于这个特定的应用程序

为此,我们需要覆盖默认的管理站点

# myproject/admin.py
from django.contrib import admin
from django.contrib.auth.forms import AuthenticationForm


class MyAdminSite(admin.AdminSite):
    login_form = AuthenticationForm

    def has_permission(self, request):
        return request.user.is_active

# myproject/apps.py
from django.contrib.admin.apps import AdminConfig

class MyAdminConfig(AdminConfig):
    default_site = 'myproject.admin.MyAdminSite'

# myproject/settings.py

INSTALLED_APPS = [
    ...
    'myproject.apps.MyAdminConfig',  # replaces 'django.contrib.admin'
    ...
]

笔记:

  • 为什么要覆盖login_formand has_permission(...)
    • 默认情况下,Django 检查is_staff标志。在我们的案例中,我们需要允许所有经过身份验证的用户

截至目前,编外用户可以登录到 Django Admin,他将能够看到一个空的 Django 仪表板,如下所示

编外用户登录

现在我们需要处理权限。为此,我正在使用组权限方案。所以,

  • 创建组
  • 所有filer应用权限添加到组
  • 将普通用户添加到Filer

向组添加权限

将用户添加到组

现在最后,对于普通用户,Django Admin 看起来像,

最后结果

于 2020-07-22T16:35:17.210 回答