py17day26
CRM项目
一,权限管理
1.表结构设计:
第一版: 1. 权限表(含有正则表达式),permission id url title 1 /userinfo/ 用户列表 2 /userinfo/(\d+)/delete/ 删除用户 3 /userinfo/(\d+)/change/ 修改用户 4 /userinfo/add/ 添加用户 2. 用户表,userinfo id username password 1 yql 123 2 wxp 123 3 zmx 123 4 ll 123 3. 用户和权限关系表 id 用户ID 权限ID 1 1 2 1 2 2 2 3 2 4 3 1 4 1 4 2 4 3 4 4 问题:用户分配权限时,麻烦
第二版: 0. 权限组,group id title 1 用户组 2 订单组 1. 权限表(含有正则表达式),permission id url title code group_i1 is_menu 1 /userinfo/ 用户列表 list 1 true 2 /userinfo/(\d+)/delete/ 删除用户 del 1 false 3 /userinfo/(\d+)/change/ 修改用户 edit 1 false 4 /userinfo/add/ 添加用户 add 1 true 5 /order/add/ ... add 2 true 6 /order/(\d+)/delete/ del 2 false 7 /order/(\d+)/change/ edit 2 false 8 /order/ list 2 true 2. 用户表,userinfo id username password 1 yql 123 2 wxp 123 3 zmx 123 4 ll 123 3. 角色表,role id title 1 销售员 2 销售经理 3 市场专员 4 市场经理 5 IT 6 CTO 7 销售市场总监 8 CEO 4. 用户角色关系表 用户ID 角色ID 1 1 2 1 2 2 3 1 3 2 3 7 5. 角色和权限关系表 角色ID 权限ID 1 1 2 1 2 4 7 1 7 3 7 4 8 1 8 2 8 3 8 4 注意:根据用户找权限 - 用户具有的所有角色 - 再根据角色找所有权限(去重)
rbac.models.py
from django.db import models class Group(models.Model): """ 权限组 """ title = models.CharField(max_length=32) #parent = models.ForeignKey(to="Group",related_name='xx',null=True,blank=True) #is_group = models.BooleanField(verbose_name='是否是组') class Meta: verbose_name_plural = "权限组表" def __str__(self): return self.title class Permission(models.Model): """ 权限表 """ title = models.CharField(verbose_name='标题',max_length=32) url = models.CharField(verbose_name="含正则的URL",max_length=128) code = models.CharField(verbose_name="权限代号",max_length=16) group = models.ForeignKey(verbose_name="权限组",to="Group",limit_choices_to={'is_group':True}) is_menu = models.BooleanField(verbose_name="是否是菜单") class Meta: verbose_name_plural = "权限表" def __str__(self): return self.title class UserInfo(models.Model): """ 用户表 """ username = models.CharField(verbose_name="用户名",max_length=32) password = models.CharField(verbose_name='密码',max_length=64) roles = models.ManyToManyField(verbose_name='具有所有角色',to="Role",blank=True) class Meta: verbose_name_plural = "用户表" def __str__(self): return self.username class Role(models.Model): """ 角色表 """ title = models.CharField(verbose_name='角色名称',max_length=32) permissions = models.ManyToManyField(verbose_name="具有所有权限",to='Permission',blank=True) class Meta: verbose_name_plural = "角色表" def __str__(self): return self.title

浙公网安备 33010602011771号