9.权限

【一】权限

1)权限控制模型

1. ACL(Access Control List,访问控制列表)

  • 将用户或组等使用者直接与对象的权限对接。

2. RBAC(Role-Based Access Control,基于角色的访问控制)

  • 将用户与角色对接,然后角色与对象的权限对接。

3. ABAC(Attribute-Based Access Control,基于属性的访问控制)

  • ABAC(Attribute-Based Access Control,基于属性的访问控制),又称为PBAC(Policy-Based Access Control,基于策略的访问控制),CBAC(Claims-Based Access Control,基于声明的访问控制)。
  • 传统的ACL、RBAC的架构是{subject,action,object},而ABAC的架构是{subject,action,object,contextual}且为他们添加了parameter(参数)。
  • subject属性:
    • 比如用户的年龄、部门、角色、威望、积分等主题属性。
  • action属性:
    • 比如查看、读取、编辑、删除等行为属性。
  • object属性:
    • 比如银行账户、文章、评论等对象或资源属性。
  • contextual属性:
    • 比如时段、IP位置、天气等环境属性

2)django自带的admin

  • admin + auth 有rbac的权限

用户表:auth_user

角色表:auth_group

权限表:auth_permission

用户与角色的多对多表:auth_user_groups

角色与权限的多对多表:auth_group_permission

用户与权限的多对多表:auth_user_user_permission

3)user的加密

pbkdf2_sha256$600000$hHslzR8Lw5IObVoFcjTng3$m/M9vnqT4EjNaL3C/LKEwzoEVGQOpRMU7J4G/UVoCTM=
  • 加密方式
    • pbkdf2_sha256
  • 过期时间
    • 600000
    • hHslzR8Lw5IObVoFcjTng3
  • 密文
    • m/M9vnqT4EjNaL3C/LKEwzoEVGQOpRMU7J4G/UVoCTM=
# 加密密码
from django.contrib.auth.hashers import make_password
eg = make_password(明文密码)
# 校验密码
from django.contrib.auth.hashers import check_password
check_password(明文密码,eg)

4)使用

  • 配置

    PASSWORD_HASHERS = (
        'django.contrib.auth.hashers.PBKDF2PasswordHasher',
        'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher',
        'django.contrib.auth.hashers.BCryptSHA256PasswordHasher',
        'django.contrib.auth.hashers.BCryptPasswordHasher',
        'django.contrib.auth.hashers.SHA1PasswordHasher',
        'django.contrib.auth.hashers.MD5PasswordHasher',
        'django.contrib.auth.hashers.CryptPasswordHasher',
    )
    
  • 导入声明,使用

    from django.conf import settings
    settings.configure(DEBUG=True)
    
    from django.contrib.auth.hashers import make_password
    from django.contrib.auth.hashers import check_password
    
    # 加密密码
    eg = make_password('1234')
    print(eg)
    # pbkdf2_sha256$600000$tumQmh9MCqmFlQVkMVkQN8$SCV5Wwv/8WqTGOpcmKQlYFOH+fgvxYoAzptpn6nFHyA=
    
    # 校验密码
    eg2 = check_password('1234', eg)
    print(eg2)
    # True
    
posted on 2024-08-14 21:05  晓雾-Mist  阅读(5)  评论(0编辑  收藏  举报