Django的 auth_permission 的自定义权限

13 篇文章 0 订阅

只需要在Model 里的 Meta 类里面增加 permissions,然后执行
python manage.py makgemigrations
python manage.py migrate
就会在 auth_permission 表中增加实例。同时在 admin 页面为指定的用户,增加相应的权限即可。(也可以通过 Navicat 直接操作数据库,不过这有点不太高明!)

D:\xxx\djangoTest\robappdj\TestModel\models.py
class BankContact(models.Model):
    mobile = models.CharField(max_length=20)
    address = models.CharField(max_length=20)
    account = models.OneToOneField("BankAccount")
    class Meta(object):
        db_table = 'back_contact'
        # Create move_bankcontact permission instance manually in poc_permission_required  view function
        permissions = (('move_bankcontact', 'Can move bank contact'),)
    def __unicode__(self):
        return "{0}-{1}".format(self.mobile, self.address)


@permission_required('TestModel.delete_bankcontact')    --- 是 Django 框架为每个 model 默认生成的权限
def poc_permission_required(request):
    return HttpResponse('In the poc_permission_required')

当然上面的 创建自定义的权限 和 给指定用户赋予权限 等一系列过程都可以通过自己的代码来实现。

from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType
from django.contrib.auth import get_user_model
# 1. 创建自定义的权限
content_type = ContentType.objects.get_for_model(BankContact)
premission = Permission.objects.create(codename='copy_bankcontact',name='Can copy bank contact',content_type=content_type)

# 2. 为指定用户赋予权限
User = get_user_model()
user_obj = User.objects.get(username=request.user.username)
# # user_obj.user_permissions.add(premission)
user_obj.user_permissions.add(Permission.objects.get(id=94))

其实说白了:
执行 python mange.py migrate 就是向数据库里写入数据,而上面的 ORM 代码也是向数据库里写入数据

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`permission_required` 是 Django 提供的一个装饰器,用于限制用户访问某个视图函数的权限。它的参数为一个权限字符串,如果用户没有该权限,则无法访问该视图函数。 具体使用方法如下: ```python from django.contrib.auth.decorators import permission_required @permission_required('app_label.permission_name') def my_view(request): # ... ``` 其中,`app_label.permission_name` 表示权限字符串,`app_label` 是指应用的名称,`permission_name` 是指对应权限的名称。例如,如果要限制用户访问某个需要 `view_article` 权限的视图函数,可以这样使用: ```python @permission_required('myapp.view_article') def my_view(request): # ... ``` 这样,只有具有 `view_article` 权限的用户才能访问该视图函数。 另外,`permission_required` 还可以接受一个可选的参数 `login_url`,表示用户未登录时跳转的页面,默认为 `settings.LOGIN_URL`。例如: ```python @permission_required('myapp.view_article', login_url='/login/') def my_view(request): # ... ``` 这样,如果用户未登录,则会跳转到 `/login/` 页面。 示例代码: ```python from django.contrib.auth.decorators import permission_required from django.shortcuts import render @permission_required('polls.view_poll') def view_poll(request): polls = Poll.objects.all() context = {'polls': polls} return render(request, 'polls/view_poll.html', context) ``` 在这个示例中,`view_poll` 视图函数只能被具有 `polls.view_poll` 权限的用户访问。如果用户没有该权限,则会被重定向到登录页面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值