django自定义权限防止所有用户都能进行删除操作

场景一:对于删除操作等不希望所有登录用户都能删除,且不是使用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 () #获得所有用户

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值