【问题标题】:Is there an easy way to add permissions to a user or a group in Django?有没有一种简单的方法可以在 Django 中为用户或组添加权限?
【发布时间】:2012-01-25 05:19:06
【问题描述】:

我目前正在向这样的用户和组添加权限:

permissions = list(
  Permission.objects.filter(
    Q(codename='add_server', content_type=ContentType.objects.get(app_label='bildverteiler', name='server'))
    | Q(codename='change_server', content_type=ContentType.objects.get(app_label='bildverteiler', name='server'))
    | Q(codename='delete_server', content_type=ContentType.objects.get(app_label='bildverteiler', name='server'))
    | Q(codename='change_group', content_type=ContentType.objects.get(app_label='bildverteiler', name='group'))
    | Q(codename='add_group', content_type=ContentType.objects.get(app_label='bildverteiler', name='group'))
    | Q(codename='delete_group', content_type=ContentType.objects.get(app_label='bildverteiler', name='group'))
    | Q(codename='change_user', content_type=ContentType.objects.get(app_label='auth', name='user'))
    | Q(codename='add_user', content_type=ContentType.objects.get(app_label='auth', name='user'))
    | Q(codename='delete_user', content_type=ContentType.objects.get(app_label='auth', name='user'))
  )
)
some_user_obj.user_permissions = permissions

有没有更好的方法?也许没有查询?

【问题讨论】:

    标签: python django permissions authentication


    【解决方案1】:

    此解决方案的字符较少:

    query=Q()
    for app_labe, name in [
      ('bildverteiler', 'server'),
      ('bildverteiler', 'group'),
      ('auth', 'user')]:
       query|=Q(content_type__app_label=app_label, content_type__name=name, codname__in=['%s_%s' % (perm_name, name) for perm_name in ['change', 'add', delete'])
    
    Permission.objects.filter(query)
    

    【讨论】:

      猜你喜欢
      • 2011-01-15
      • 1970-01-01
      • 2019-02-18
      • 1970-01-01
      • 1970-01-01
      • 2021-02-19
      • 1970-01-01
      • 1970-01-01
      • 2012-08-19
      相关资源
      最近更新 更多