Django中带有自定义权限的Python用户组
让我们考虑一下旅行预订服务,他们是如何通过不同的计划和套餐工作的。有一个产品清单,用户在订购不同的套餐时可以得到该公司提供的产品。一般来说,他们遵循的理念是按级别分配不同的产品。
让我们看看旅游预订服务中的不同套餐。
1.初始计划:在这个套餐中,用户将获得非空调巴士旅行和在非空调房间住宿1天的便利。比方说,旅行是从德里到哈里德瓦(北阿坎德邦的一个宗教场所)。
2.黄金计划:该计划的费用将比起步计划高一些。在这个计划中,用户将被安排在非空调房中停留2天,乘坐空调巴士,行程将从德里到哈里瓦、瑞诗凯诗和穆索里。
3.钻石计划 :这是最昂贵的计划,用户将获得3天的计划,包括AC巴士和AC房间住宿,以及哈里瓦、瑞诗凯诗和穆索里的旅行,还有水上公园的旅行。
我们的主要目标是以一种非常有效的方式设计和编写后端代码(遵循DRY原则)。
在Django中,有多种方法可以实现这一点,但最合适和有效的方法是将用户分组,并定义这些组的权限。该组的用户将自动继承该组的权限。让我们先定义一下用户模型。
创建一个Django应用程序users。在models.py文件中,在’users’应用目录下,写下这段代码。
迁移了上面写的模型后,我们有两个选择来制作组。
1.Django管理小组:在管理小组中,你会看到黑体字的组,点击该组并建立3个不同的组,分别命名为level0, level1, level3。同时,根据需要定义自定义权限。
2.通过程序化地创建一个具有权限的组。使用python manage.py shell打开python shell。
我们将以同样的方式为所有三个组设置不同的权限。在那之前,我们已经建立了组,并将其与自定义权限联系起来。
现在,检查一个特定的用户是否访问了适当的功能,比如,设置一个限制,level0不能访问level1用户或level2用户的功能,等等。为了做到这一点,检查每个视图功能的权限。
这里要非常小心,对于基于函数的视图,我们将简单地使用自定义装饰器。
例如:
更多细节,请参考本网站。
当我们谈论基于类的视图时,事情变得有点复杂,我们不能简单地只添加一个装饰函数,而是要做一个权限混合类。
例如:
更多细节,请参考。
1. https://docs.djangoproject.com/en/1.11/topics/class-based-views/mixins/
2. http://bradmontgomery.blogspot.in/2009/04/restricting-access-by-group-in-django.html
3. https://simpleisbetterthancomplex.com/2015/12/07/working-with-django-view-decorators.html
4. https://micropyramid.com/blog/custom-decorators-to-check-user-roles-and-permissions-in-django/