答案很大程度上取决于您的型号和应用。您究竟是如何使用内容类型框架的?
一般来说,建议有一个额外的抽象层来控制内容类型框架的使用。
例子
让我构建一个例子。假设您有这些模型:Portal、Cube和Cake。Portal
并且Cube
是公共的,而Cake
对于具有特定权限的用户是私有的。
据我了解,您的方法是这样的:
# gets called via GET with parameters content_type_id and object_id
def modify_object(request, content_type_id, object_id)
content_type = ContentType.objects.get_for_id(content_type_id)
model_class = content_type.model_class()
instance = model_class.objects.get(pk=object_id)
# modify instance - could also be a "Cake"
instance.save()
如果您只想允许修改某些类型的对象,这很容易受到攻击。您可以添加对 content_type 的检查,但这似乎不是很复杂且设计巧妙。
相反,我会采用一种不太通用的方法。为您希望允许用户的模型上的每个不同任务定义方法:
def create_portal(request, object_id):
portal = Portal.objects.get(pk=object_id)
# create the portal
portal.save()
def carry_cube(request, object_id):
# load, move the cube and save
@permission_required('cake.can_eat')
def eat_cake(request, object_id):
# this will only be performed if the current user has the required permissions
# load, eat the delicious cake and save
希望这些信息对您有所帮助。有了更多来自您的意见,就更容易给出更详细的答案。