场景一:对于删除操作等不希望所有登录用户都能删除,且不是使用django进行的数据控制,需要进行特殊控制
1,url文件:
path('task-del.html', views.TaskDel.as_view(), name='task_del'),
2,views文件:
class EcsDel(LoginRequiredMixin, PermissionRequiredMixin, View):
permission_required = ('asset.delete_ecs',) #权限过滤
model = Task
def post(self, request):
ret = {'status': True, 'error': None, }
nid = self.request.POST.get('nid', None)
Task.objects.get(id=nid).delete()
return HttpResponse(json.dumps(ret))
asset.delete_ecs:该权限名称代表asset应用的ecs模型的删除权限。可通过djiango进行权限设置。
场景二:自定义权限,通过django自带权限模块进行菜单显示控制,后端权限判断,根据权限获取相关用户:
1、model中定义权限名称:
class SqlOrder(models.Model):
class Meta: permissions = ( ("createSqlOrder", "提交SQL申请权限"), ("auditSqlOrder", "审核SQL申请权限"), ("runSqlOrder", "执行SQL申请权限"), ("manager", "管理SQL申请功能权限"), )
2、执行python manage.py makemigrations ; python manage.py migrate 进行权限刷新。
3、登录django后台,进行权限赋值。
4、编辑html页面进行显示过滤:
{% if perms.sqlapply.createSqlOrder %} #注意,perms是固定字符串,sqlapply是应用名,createSqlOrder 是自定义权限名
<li class="mySqlOrder">
<a href="{% url 'sqlapply:mySqlOrder' %}">我的工单</a>
</li>
<li class="sqlOrderCreate">
<a href="{% url 'sqlapply:sqlOrderCreate' %}">提交申请</a>
</li>
{% endif %}
5、python后台,对登录用户进行权限判断:
if request.user.has_perm("sqlapply.runSqlOrder"): #有执行权限,直接执行 SqlOrder.objects.filter(id=sqlOrder_id).update(status=3)
6、获取具有指定权限的所有用户:
from django.contrib.auth.models import User,Permission
from django.db.models import Q
perm = Permission.objects.get(codename = 'runSqlOrder') #注意权限名,没有前缀
users = Users.objects.filter(Q(groups__permissions = perm) | Q(user_permissions = perm)).distinct () #获得所有用户