权限管理:在简单的系统中,以往都是将每个权限赋予给用户,每个用户访问某个功能,通过查询db来判断用户是否有权限。但是如下情景不能够解决:

1、随着系统的复杂,权限较为复杂的时候,权限条目也多,系统角色较多的时候,我们不能重复的给每个角色赋予相同的权限,这里提出了权限虚拟角色的概念。

2、每个用户访问的UI界面应该是不同,而不是显示所有功能,这样用户体验能好些。也就说根据用户的权限来实现动态菜单显示。

大体设计思想如下:

          aaarticlea/png;base64,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" alt="" />

  • 我们自定义一些虚拟角色,这些虚拟角色包含一些权限,然后将虚拟角色赋予给用户,每次修改权限的时候,直接修改权限虚拟角色即可。
  • 将权限细分为每个url,通过分配不同的url给权限虚拟角色即是功能上实现控制不同用户访问不同的UI界面,这样控制用户,不同的用户访问系统的时候,页面不一样,达到权限的控制。

url分类:

          aaarticlea/png;base64,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" alt="" />

url大体分2类:

  • 功能url:主要作用是实现系统的功能相关、和左边菜单无关。
  • 菜单功能:右边菜单功能url,分两种:一种顶级菜单:这种菜单没有url跳转。一种是:次级菜单:有相应a标签的跳转url。

基于上面的总结,系统的权限表至少要包含:

  • 实现功能url:表中需要有判断该url是功能url还是菜单url,比如:is_menu字段,由布尔值组成。true为菜单,false为功能url。
  • 实现功能url:表中需要有有一个判断字段是否为本表中的id做为父id,字段定义为:parent_id,字段为None且is_menu值为True表示为顶级标签。不为None为次级标签,功能url为None。也就是说parent_id 可以是本表的id做foreign key 外键操作,也可以定义可为null的字段。

同时顶级标签url为空。即表中url字段为空。

表结构设计:

          aaarticlea/png;base64,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" alt="" />

slqalchemy 表结构创建:(relationship方法内的不是表名而是类名,这种关系是建立在类和对象的基础而不是数据库上。)

 from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index,Boolean#导入列数据类型字段。
from sqlalchemy.orm import sessionmaker, relationship#导入会话函数、
from sqlalchemy import create_engine
engine = create_engine("mysql+pymysql://root:@192.168.31.222:3306/orm_test", max_overflow=)#创建数据库引擎,通过连接池获取数据库的连接。数据库连接池数量为:,默认值是5.
#创建sqlorm基类。(为声明的类定义基类。)
Base = declarative_base() class Permisson(Base):
'''
功能:该类是权限表结构。
'''
__tablename__='permisson'
id=Column(Integer,autoincrement=True,primary_key=True)
caption=Column(String())
parent_id=Column(Integer,ForeignKey('permisson.id'),nullable=True)
par_re=relationship('Permisson',backref='p')
is_menu=Column(Boolean)
url=Column(String(),nullable=True)
data_method=Column(String())
keywargs=Column(String()) class Userinfo(Base):
'''
功能:该表是用户表结构
'''
__tablename__='userinfo'
id=Column(Integer,autoincrement=True,primary_key=True)
username=Column(String())
password=Column(String()) class Role(Base):
'''
功能:该表是权限虚拟角色表结构。
'''
__tablename__='role'
id=Column(Integer, autoincrement=True,primary_key=True)
rolename=Column(String()) class UserinfotoRole(Base):
'''
功能:该表是用户和权限虚拟角色多对多第三张表。
'''
__tablename__='userinfotorole'
id=Column(Integer,autoincrement=True,primary_key=True)
user_id=Column(Integer,ForeignKey('role.id'))
role_id=Column(Integer,ForeignKey('userinfo.id'))
user_ob=relationship('UserinfotoRole',backref='ur')
role_ob=relationship('Role',backref='ur') class RoletoPermisson(Base):
'''
功能:该表是权限角色和权限的多对多的表结构。
'''
__tablename__='roletopermisson'
id=Column(Integer,autoincrement=True,primary_key=True)
roleid=Column(Integer,ForeignKey('role.id'))
permissonid=Column(Integer,ForeignKey('permisson.id'))
pe_ob=relationship('Permisson',backref='rp')
ro_ob=relationship('Role',backref='rop') Base.metadata.drop_all(engine)##执行该函数,他就会执行所有Base所有的子类。调用我们定义类并创建相应的表结构。

django版本的表结构:默认使用的数据库为sqlite。

 from django.db import models

 # Create your models here.

 class Permission(models.Model):
caption=models.CharField(max_length=)
is_menu=models.BooleanField()
parent_id=models.ForeignKey('Permission',related_name='nid',null=True,to_field='id')
url=models.CharField(max_length=,null=True)
data_mothod=models.CharField(max_length=)
keywargs=models.CharField(max_length=) class Userinfo(models.Model):
usename=models.CharField(max_length=)
password=models.CharField(max_length=) class Role(models.Model):
rolename=models.CharField(max_length=) class Userinfotorole(models.Model):
user=models.ForeignKey('Userinfo')
role=models.ForeignKey('Role') class PermissontoRole(models.Model):
permisson=models.ForeignKey('Permission',related_name='p',to_field='id')
role=models.ForeignKey('Role')

对permission表的解析:

django表:

默认情况下,django在数据库中给我们创建一个自增id列且为主键,所以我们不用想sqlalchemy那样手动创建主键。在django中创建foreign或者ManyToMany的时候,自动和父表的id主键列建立外键关系。

 class Permission(models.Model):
caption=models.CharField(max_length=)
is_menu=models.BooleanField()
parent_id=models.ForeignKey('Permission',related_name='nid',null=True,to_field='id')
url=models.CharField(max_length=,null=True)
data_mothod=models.CharField(max_length=)
keywargs=models.CharField(max_length=)

字段解析:

  • caption:列表表示菜单上文字。
  • is_menu:判断当前行对象是否为菜单还是内容的url。字段属性是布尔。
  • parent_id:该字段是关联自己表,建立的外键。也可以不建立外键关系。只要保证该值可以为空(必须可以为空,因为有可能该列的不属于菜单)。其中relate_name当我们进行反向查询的时候,查询的关联字段。避免和PermissontoRole表冲突。to_field='id'和哪个列关联。
  • url:菜单和用户访问的url,该字段也必须可以为空,顶级的菜单只是文字并没有跳转,需要跳转的是次级菜单或者内容url。
  • data_mothd:该字段使用或者请求这个权限或者url的方法。比如:POST、GET方法。因为在这个系统我们设计的是:权限对应url。
  • keywargs:这个字段很重要;以为我们django给咱们提供的方法就2个:POST和GET请求。如果你给别人API的时候,如何提供:增、删、改、查?

  查可以用:GET,增加可以用:POST,删除和改呢?

  这个时候这个字段重要性就提现出来。我们可以在这个字段定义:add 、del、update、check。前端的进行请求的时候,无论是get还是POST:

     $.ajax(
{
url:'/data/',
method:'POST',
data: {'type':'del','data':[,,,]},
datatype:JSON,
success:function(data){
void
}
}
)

后者GET请求:

 import requests

 playload={'user':'tome','type':'check'}
get_url='http://127.0.0.1:8888/data/'
f=requests.get(url=get_url,data=playload)#data参数只能是字典。
request_content=f.text
print(request_content)

后台可以根据前端发送的数据,取得"type"字段,然后可以根据类型 后台建立一个反射(attr),映射到不同的方法进行处理。

权限管理系统---django版本的更多相关文章

  1. 通用权限管理系统数据字典 V3.9 版本,欢迎开发个各种业务系统的朋友们,参考表结构

    C#.NET通用权限管理系统组件数据字典 导  航 ◇ (01) BaseItemDetails ◇ (02) BaseItems ◇ (03) BaseLog ◇ (04) BaseMessage ...

  2. 通用权限管理系统接口文档V4.2 版本之消息接口介绍

    通用权限管理系统提供的消息接口可实现消息获取,消息发送,底层使用Redis对消息进行缓存,解决消息的并发请求对数据库的压力. 前端可以通过客户端轮询来获取最新消息,前端效果截图如下:

  3. python 全栈开发,Day111(客户管理之 编辑权限(二),Django表单集合Formset,ORM之limit_choices_to,构造家族结构)

    昨日内容回顾 1. 权限系统的流程? 2. 权限的表有几个? 3. 技术点 中间件 session orm - 去重 - 去空 inclusion_tag filter 有序字典 settings配置 ...

  4. Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  5. Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  6. 分享一个html+js+ashx+easyui+ado.net权限管理系统

    EasyUI.权限管理 这是个都快被搞烂了的组合,但是easyui的确好用,权限管理在项目中的确实用.一直以来博客园里也不少朋友分享过,但是感觉好的要不没源码,要不就是过度设计写的太复杂看不懂,也懒得 ...

  7. Winform开发框架之权限管理系统的改进

    权限管理系统,一直是很多Mis系统和一些常见的管理系统所需要的,所以一般可以作为独立的模块进行开发,需要的时候进行整合即可,不需要每次从头开发,除非特殊的系统需求.我在Winform开发框架介绍中的随 ...

  8. Angularjs,WebAPI 搭建一个简易权限管理系统

    Angularjs,WebAPI 搭建一个简易权限管理系统 Angularjs名词与概念(一)   1. 目录 前言 Angularjs名词与概念 权限系统原型 权限系统业务 数据库设计和实现 Web ...

  9. ABP+AdminLTE+Bootstrap Table权限管理系统第五节--WBEAPI及SwaggerUI

    一,Web API ABP的动态WebApi实现了直接对服务层的调用(其实病没有跨过ApiController,只是将ApiController公共化,对于这一点的处理类似于MVC,对服务端的 调用没 ...

随机推荐

  1. LOJ#6271. 「长乐集训 2017 Day10」生成树求和 加强版

    传送门 由于是边权三进制不进位的相加,那么可以考虑每一位的贡献 对于每一位,生成树的边权相当于是做模 \(3\) 意义下的加法 考虑最后每一种边权的生成树个数,这个可以直接用生成函数,在矩阵树求解的时 ...

  2. 前端 ajax 获取后台json数据 解析

    先贴代码 function edit(node) { ).text(); alert(customerid) $.ajax({ type: "post", url: "/ ...

  3. 《Pro Git》轻松学习版本控制

    转自 https://kindlefere.com/post/333.html 什么是“版本控制”?我为什么要关心它呢?版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统.在 ...

  4. 在asp.net一般应用程序中使用session

    通常我们经常,通过session判定用户是否登录.还有一些临时的.重要的数据也尝尝存放在Session中. 在页面我们很容易的得到Session的值,但在类中就会遇到一些问题.也知道通过下面的方法得到 ...

  5. asp.net MVC4 框架揭秘 读书笔记系列3

    IIS/ASP.net管道 本节全部用图形表示便于理解和记忆 1.3.1 IIS5.x与asp.net 1.3.2 IIS 6.0与asp.net 1.3.3 IIS7.0与asp.net 基于IIS ...

  6. [翻译] AAPullToRefresh

    AAPullToRefresh 效果: Requirement - 需要的环境 ARC. iOS 6 or higher(tested on iOS 6, 7 and 8). Install - 安装 ...

  7. 使用CoreData [3]

    使用CoreData [3] 此篇幅介绍CoreData如何升级版本防止崩溃 把你之前创建的实体文件全部删除掉,把沙盒中的数据库文件删除掉,实体只保持一个,然后重新创建出实体文件. - (BOOL)a ...

  8. MFC连接postgre数据库

    配置环境: include:libpq-fe.h文件 lib:libpq.lib文件 dll:libeay32.dll,libiconv-2.dll,libintl-8.dll,libpq.dll,s ...

  9. LintCode,hihoCoder,LeetCode有什么区别?

    https://www.zhihu.com/question/31218682 知乎用户 9 人赞同了该回答 LintCode 和LeetCode的题差不太多LintCode 有中文,不过没有用户讨论 ...

  10. AppHangB1:explorer进程停止与Windows交互

    现象:Windows 7,打开 “计算机” 的时候,资源管理器卡死,如图所示. 解决方法:卸载 CAD迷你看图软件,利用 CCleaner 清除注册表.