Django framework - permission table design

Description: Create the class models: five classes, seven tables roles and permissions table is a table-many relationship (a character can have multiple permissions, a permission can correspond to multiple roles); user and role tables are many relationship (a user can have multiple roles, a role multiple users);

First, the design table structure

Creating models in the class: class five, seven table

  • Roles table:
  • user table:
  • Permissions table:
  • Rights group table:
  • Menu table:

Table roles and permissions tables are many relationships (a character may have a plurality of privilege, permission may correspond to a plurality of characters);

User and role tables are many relationships (a user may have multiple roles, a role of a plurality of users);

So there will be more to generate the relationship between two tables;

A plurality of menu groups below;

A plurality of menu group below;

A menu below more rights;

################### rights section

class UserInfo (models.Model): ## user table
    name = models.CharField(max_length=16, blank=True, null=True, verbose_name="用户名")
    password = models.CharField(max_length=128, blank=True, null=True, verbose_name="密码")
    email = models.CharField(max_length=32, verbose_name="邮箱")
    userPosition = models.ForeignKey (to = "Position", blank = True, null = True, verbose_name = "post", related_name = "userposi") # users and posts many relationship

    def __str__(self):
        return self.name

    class Meta:
        verbose_name_plural = "User Table"


class Position (models.Model): ## posts table
    name = models.CharField(max_length=16, blank=True, null=True, verbose_name="职位名")
    auth = models.ManyToManyField(to='Auth', blank=True, null=True, verbose_name="权限", related_name="posauth")

    def __str__(self):
        return self.name

    class Meta:
        verbose_name_plural = "Table Position"


class Auth (models.Model): ## permissions table
    name = models.CharField (max_length = 64, blank = True, null = True, verbose_name = "The pathname")
    url = models.CharField(max_length=64, blank=True, null=True, verbose_name="路径")
    groupauth = models.ForeignKey (to = 'AuthGroup', blank = True, null = True, verbose_name = "group permissions", related_name = "authgroup") # group permissions and many relationship, a plurality of group authority


    def __str__(self):
        return self.name

    class Meta:
        verbose_name_plural = "permission form"  

Three permissions table design
# Character table
CREATE TABLE `sp_role` (
  `role_id` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
  `Role_name` varchar (20) NOT NULL COMMENT 'role name'
  `ps_ids` varchar(512) NOT NULL DEFAULT '' COMMENT '权限ids,1,2,5',
  `Ps_ca` text COMMENT 'Controller - operation, the controller - operation, the controller - operation',
  `role_desc` text,
  PRIMARY KEY (`role_id`)
) ENGINE=InnoDB AUTO_INCREMENT=42 DEFAULT CHARSET=utf8;

#Permissions table
DROP TABLE IF EXISTS `sp_permission`;
CREATE TABLE `sp_permission` (
  `ps_id` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
  `Ps_name` varchar (20) NOT NULL COMMENT 'name rights'
  `ps_pid` smallint(6) unsigned NOT NULL COMMENT '父id',
  `Ps_c` varchar (32) NOT NULL DEFAULT '' COMMENT 'controller',
  `Ps_a` varchar (32) NOT NULL DEFAULT '' COMMENT 'Operation',
  `Ps_level` enum ( '0', '2', '1') NOT NULL DEFAULT '0' COMMENT 'privilege level',
  PRIMARY KEY (`ps_id`)
) ENGINE = InnoDB AUTO_INCREMENT = 160 DEFAULT CHARSET = utf8 COMMENT = 'permission table';

#user table
DROP TABLE IF EXISTS `sp_manager`;
CREATE TABLE `sp_manager` (
  `mg_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `Mg_name` varchar (32) NOT NULL COMMENT 'name',
  `Mg_pwd` char (64) NOT NULL COMMENT 'password'
  `Mg_time` int (10) unsigned NOT NULL COMMENT 'registration date'
  `role_id` tinyint(11) NOT NULL DEFAULT '0' COMMENT '角色id',
  `mg_mobile` varchar(32) DEFAULT NULL,
  `mg_email` varchar(64) DEFAULT NULL,
  `Mg_state` tinyint (2) DEFAULT '1' COMMENT '1: represents Enable 0: Disabled',
  PRIMARY KEY (`mg_id`)
) ENGINE = InnoDB AUTO_INCREMENT = 510 DEFAULT CHARSET = utf8 COMMENT = 'administrator table';

# Permissions API
CREATE TABLE `sp_permission_api` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ps_id` int(11) NOT NULL,
  `ps_api_service` varchar(255) DEFAULT NULL,
  `ps_api_action` varchar(255) DEFAULT NULL,
  `ps_api_path` varchar(255) DEFAULT NULL,
  `ps_api_order` int(4) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `ps_id` (`ps_id`)
) ENGINE=InnoDB AUTO_INCREMENT=60 DEFAULT CHARSET=utf8;

 user table

 

 

Roles table

 


Permissions table

 

 Permissions API table

 

 


Reference: https://www.codercto.com/a/56577.html




Guess you like

Origin www.cnblogs.com/weidaijie/p/12658482.html