django - django 权限:用户只能查看和编辑“他的”对象
问题描述
我正在构建一个管理公寓的应用程序:
有不同的行政部门。每个管理部门都有用户。每个政府都拥有房产,每个房产都有 1 到 n 个单位。
到现在为止还挺好。这或多或少是设置。
不,棘手的部分来了。行政部门 A 的用户只应被允许查看其行政部门拥有的房产和公寓。
我将如何最好地做到这一点?
解决方案
假设 Administrator 模型和 User 模型之间存在 ForeingKey 关系,您可以对用户可以看到的内容进行过滤。例如:
class UserCreatesAndViewsSomething(LoginRequiredMixin, CreateView):
model = UserLog (or something like that)
template_name = 'some template you have'
fields = ('field you want to display',)
# This function will submit the form to the database
def form_valid(self, form):
# this will help you determine what the current administrator is
administrator = AdministratorModel.objects.get(user=self.request.user, administrator=self.kwargs['administrator'])
form.instance.user = self.request.user
# This will autopopulate administrator input to the current user administrator
form.instance.administrator = administrator
return super(UserCreatesAndViewsSomething, self).form_valid(form)
# get_context_data will help you determine what the user can see.
def get_context_data(self, **kwargs):
administrator = AdministratorModel.objects.get(user=self.request.user, administrator=self.kwargs['administrator'])
context = super(UserCreatesAndViewsSomething, self).get_context_data(**kwargs)
context['something'] = to_journal_entry.objects.filter(user=self.request.user, administrator=administrator)
return context
我知道这很多,但如果你完全熟悉 Django,你当然可以做到。您将不得不经历一些试验和错误,但这是我用于我的项目的方法。
最后注意,这假设您的所有用户和用户输入都在同一个数据库中,并且代码可以帮助您仅获取相关信息。如果您正在处理高重要性客户或一些敏感信息,您可能应该考虑多租户,这将为您的每个客户设置不同的架构或不同的数据库。这将导致不同的代码结构。
希望这可以帮助。
推荐阅读
- r - ggplot facet 中缺少 2D 密度层
- powerbi - Dax 函数 DATESINPERIOD 未给出正确答案
- css - 如何通过css缩小图像?
- vulkan - VkSubpassDependency 规范说明
- javascript - 从函数返回到绑定的Angular模板文字中的换行符?
- javascript - 如何通过 node-fetch 发送 cookie
- python - 我在使用烧瓶的 python 中遇到错误,很难理解,我的代码或库有问题吗?
- unit-testing - 如何模拟在另一个私有方法中调用的私有方法
- python - python Django中存储的索引文件示例在哪里?
- javascript - 单击按钮时如何将url放入变量中