我正在尝试根据员工的工作地点创建自定义访问权限。例如,如果他们在诊所A工作,他们只能查看/添加/修改该诊所A的数据。但如果他们是该区的所有人,他们可以访问该区的所有诊所。它在函数库视图上工作正常,但它在类基本视图上杀了我。到目前为止我的代码如下:
def restrict_klinik(function):
def wrapper(request,slug, *args, **kw):
klinikslug = request.user.letakstaf_set.filter(klinik__slug=slug).count()
retenslug = Reten.objects.filter(slug=slug).count()
rejectslug = Reject.objects.filter(slug=slug).count()
if klinikslug == 1 or retenslug == 1 or rejectslug == 1:
return function(request, slug, *args, **kw)
messages.error(request, 'Sorry, You dont have access.')
return HttpResponseRedirect(reverse_lazy('home'))
return wrapper
class RestrictKlinikMixin(views.LoginRequiredMixin):
@method_decorator(restrict_klinik)
def dispatch(self, *args, **kwargs):
return super(RestrictKlinikMixin, self).dispatch(*args, **kwargs)
我正在使用@restrict_klinik作为我的函数库视图,但是在使用类基本视图时遇到了问题,例如:
类AddClinic(RestrictKlinikMixin,generic.CreateView):
它会抛出'slug'错误。 有任何想法吗?谢谢!
更新: 显然我的一个观点是使用kwargs ['slug']而不是self.kwargs ['slug']。有趣的是,我唯一改变的是在我的观点中添加新的mixin。浪费了4个小时来计算这个,因为它只使用kwargs ['slug']已经工作了1个月。
答案 0 :(得分:0)
显然我的一个观点是使用kwargs [' slug']而不是self.kwargs [' slug']。有趣的是,我唯一改变的是在我的观点中添加新的mixin。浪费了4个小时来计算这个,因为它只使用了kwargs [' slug']已经工作了1个月。