后台管理系统----day17

用户权限

一个商城,后台维护人员不只一个,还有其他后台人员,如:信息录入、财务、运营、采购等,他们对应的角色不同,所对应的权限也不相同,需要后台管理员来分配权限。

1. RBAC介绍

RBAC概述

在网站中,用户通过URL地址,进入网站的后端逻辑,从而对网站的数据库进行操作管理。可以让拥有权限的用户来完成操作,而没有权限的用户无法操作.

RBAC是基于角色的访问控制(Role-Based Access Control ),在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限,这就极大地简化了权限的管理。将权限赋予角色,而把角色又赋予用户,这样的权限设计很清楚,管理起来很方便

RBAC认为授权实际上是WhoWhatHow 三元组之间的关系,也就是WhoWhat 进行How 的操作,也就是“主体”对“客体”的操作。

Who:是权限的拥有者或主体(如:User,Role)。

What:是操作或对象(operation,object)。

How:具体的权限(Privilege,正向授权与负向授权)。

RBAC生命周期

1、用户登陆验证

2、根据用户身份验证信息,获取用户的角色

3、通过用户所绑定的角色,获取这个角色绑定的所有权限,并去重

4、查询用户所访问的URL是否在角色的权限内,如果在,则继续访问,如果不在,拒绝访问

2. RBAC表设计

2.1 RBAC表设计

用户表

id username password phone last_login role
1 lucy123 *** 1733** 2022-3-15 17:30:01 1
2 jack123 *** 1733** 2022-3-15 17:30:01 3

权限表

id name code_name type_name
1 订单列表 get ^orders/info/$ 1
2 新增订单 post ^orders/info/$ 1
3 检索订单 get ^orders/info/(?P<pk>[^/.]+)/$ 1
4 更新订单 put ^orders/info/(?P<pk>[^/.]+)/$ 1
5 删除订单 delete ^orders/info/(?P<pk>[^/.]+)/$ 1
6 权限列表 get ^users/permission/$ 1
7 增加权限 post ^users/permission/$ 1
8 检索权限 get ^users/permission/(?P<pk>[^/.]+)$ 1
9 更新权限 put ^users/permission/(?P<pk>[^/.]+)$ 1
10 删除权限 delete ^users/permission/(?P<pk>[^/.]+)$ 1

权限类型, 即角色

id name
1 管理员
2 运营
3 新人

用户组

id name user permission
1 开发组 1 1
2 开发组 1 2
3 开发组 1 3
4 开发组 1 4
5 开发组 1 5
6 开发组 2 1
7 开发组 2 3

 
模型类定义

from django.db import models
from django.contrib.auth.models import AbstractUser

# 权限类型(角色)
# name varchar(30)  '权限类型的名称'
class PermissionType(models.Model):
    """权限的类型"""
    name = models.CharField(max_length=30, verbose_name='权限类型的名称')

    class Meta:
        db_table = 'permission_type'

    def __str__(self):
        return self.name

# 用户模型类,继承AbstractUser
# phone, varchar(11) 允许空 唯一 '用户手机'
# last_login
# role  fk--->PermissionType
class User(AbstractUser):
    """
    用户表
    """
    phone = models.CharField(max_length=11, null=True, unique=True, blank=True, verbose_name='用户手机')
    last_login = models.DateTimeField()
    # 已定义好的模型类,可添加字段
    role = models.ManyToManyField(PermissionType, verbose_name='所属角色')

    class Meta:
        db_table = 'user'

    def __str__(self):
        return self.username


# 权限表
# name  varchar(30)  '权限名称'
# code_name  varchar(300)  '权限识别名称'
# type_name fk  --->PermissionType
class Permission(models.Model):
    """
    权限模型类
    """
    name = models.CharField(max_length=30, verbose_name='权限名称')
    code_name = models.CharField(max_length=300, verbose_name='权限识别名称')
    type_name = models.ForeignKey(PermissionType, on_delete=models.CASCADE)
   
	def __str__(self):
		return self.name
		
    class Meta:
        db_table = 'permission'


# 用户组
# name  varchar(30)  '组名称'
# user  m:n
# permission m:n
class UserGroup(models.Model):
    """用户组的模型类"""
    name = models.CharField(max_length=30, verbose_name='组名称')
    user = models.ManyToManyField(User)
    # 更改模型类: 改为多对多
    permission = models.ManyToManyField(Permission)

    class Meta:
        db_table = 'user_group'

    def __str__(self):
        return self.name

添加测试数据

  1. 根据以上表中的数据,在pycharm中添加权限类型
    在这里插入图片描述
  2. 添加管理权限数据的管理员权限
    使用django>admin超级管理后台,添加数据:
# 创建超级用户
# python manage.py createsuperuser

# 权限模型类  注册到管理后台
class PermissionManager(admin.ModelAdmin):
    # 显示哪些字段
    list_display = ["id", "name", "code_name"
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

laufing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值