设计一个千人千面的权限系统,我只用了10分钟

信息系统的权限设置是一个重要的话题,好的权限设计能够让系统具有良好的可扩展性,也就是千人千面效果。糟糕的权限管理往往使得开发人员面临复杂的工作压力,很多开发人员工作了好几年都没整明白权限到底是哪里控制的,甚至还沉浸在仰望的岁月里。但是仔细梳理我们发现,权限就是不断微分的方法,资源要整合到不同的菜单里必然产生一张关联表,而菜单要整合到不同的角色中,同样产生一张角色到菜单的关联表。当分析到角色的时候也就是对应到我们的用户表了。

也就是权限管理的表主要包含:资源表(前端页面)、菜单表(菜单目录)、资源-菜单关系表(解耦)、角色表角色-菜单表关系表(解耦)、用户表。

既然权限管理这么简单,那就手撸一个吧!

-- 建库
create database scaffold;
use scaffold;


-- 创建资源表,页面部分
CREATE TABLE resource (
id int not null primary key auto_increment,
resourcename varchar(64)  COMMENT '资源名称',
resourceurl varchar(64) COMMENT '资源路径h5',
content varchar(128) COMMENT '资源描述',
flag varchar(64) COMMENT '其他标志'
)ENGINE=InnoDB;


-- 菜单表
CREATE TABLE tmenu (
id int not null primary key auto_increment,
mununame varchar(64) NOT NULL COMMENT '菜单名称',
content varchar(128) COMMENT '菜单描述',
flag varchar(64) COMMENT '标志'
)ENGINE=InnoDB;


-- 菜单与资源的关系表
CREATE TABLE menu_resource (
id int not null primary key auto_increment,
menusid int COMMENT '菜单id',
resourcesid int COMMENT '资源id',
CONSTRAINT m_tmenu FOREIGN KEY (menusid) REFERENCES tmenu (id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT m_resources FOREIGN KEY (resourcesid) REFERENCES resource (id) ON DELETE CASCADE ON UPDATE CASCADE
)ENGINE=InnoDB;


-- 角色表
CREATE TABLE role (
id int NOT NULL PRIMARY KEY auto_increment,
rolename varchar(64) COMMENT '角色名称',
menuid varchar(64) COMMENT '菜单id',
content varchar(128) COMMENT '内容描述',
flag varchar(64) COMMENT '标志'
)ENGINE=InnoDB DEFAULT CHARSET=utf8;


-- 角色菜单表
CREATE TABLE role_menu (
id int not null primary key auto_increment,
roid int COMMENT '角色id',
tmid int COMMENT '菜单id',
CONSTRAINT role_r_tm FOREIGN KEY (roid) REFERENCES role (id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT role_tm1 FOREIGN KEY (tmid) REFERENCES tmenu (id) ON DELETE CASCADE ON UPDATE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=utf8;


-- 用户表
CREATE TABLE user (
id int primary key not null auto_increment,
loginid varchar(128) NOT NULL COMMENT '用户登录号,手机号',
username varchar(64) not null COMMENT '用户名称',
userpassword varchar(64) not null COMMENT '用户密码',
useremil varchar(64) COMMENT '用户电子邮箱',
roid int not null COMMENT '用户权限标志',
CONSTRAINT user_role FOREIGN KEY (roid) REFERENCES role (id) ON DELETE CASCADE ON UPDATE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

权限管理模块开发完毕大概就长这个样子,是不是有一点靓?相关源码已经放到github上了,欢迎大家给我一颗小星星。https://github.com/tianjingle/Scaffold

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以给您提供一个基本的框架来完成这个任务。这个框架将使用 TensorFlow 和 Keras 来实现 CNN 和 GAN。 首先,您需要准备一个包含人脸和非人脸的训练数据集。可以使用公开的数据集,如 CelebA 或者 LFW 数据集。在这个数据集上训练一个人脸检测器,可以使用 OpenCV 或者 TensorFlow Object Detection API 来实现。 接着,您需要实现一个基于 CNN 的人像分割器。这个分割器可以使用 U-Net 或者 Mask R-CNN 来实现。这里我们以 U-Net 为例。为了训练 U-Net,您需要准备一个包含人像和非人像的训练数据集。可以使用公开数据集,如 PASCAL VOC 或者 COCO 数据集。在这个数据集上训练 U-Net,可以使用 TensorFlow 或者 Keras 框架来实现。 接下来,您需要实现一个基于 GAN 的头发分割器和图像风格转换器。这个分割器和转换器可以使用 pix2pix 或者 CycleGAN 来实现。这里我们以 pix2pix 为例。为了训练 pix2pix,您需要准备一个包含输入图像和期望输出图像的训练数据集。在这个数据集上训练 pix2pix,可以使用 TensorFlow 或者 Keras 框架来实现。 最后,您需要将人像和背景重新合并,生成具有动漫风格的二次元形象。这个步骤可以使用 OpenCV 或者 TensorFlow 来实现。 下面是一个基本的代码框架,您可以根据自己的需求进行修改和扩展。 ```python # 导入必要的库 import cv2 import numpy as np import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers # 定义 U-Net 模型 def unet_model(): # 定义模型结构 # ... # 编译模型 # ... return model # 定义 pix2pix 模型 def pix2pix_model(): # 定义模型结构 # ... # 编译模型 # ... return model # 加载模型 unet = unet_model() pix2pix = pix2pix_model() # 加载人脸检测器 face_detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') # 加载图片 img = cv2.imread('input.jpg') # 检测人脸 faces = face_detector.detectMultiScale(img) # 遍历每个人脸 for (x, y, w, h) in faces: # 裁剪人脸区域 face_img = img[y:y+h, x:x+w] # 对人脸进行人像分割 mask = unet.predict(face_img) # 对头发进行分割和风格转换 hair_img = img[y:y+h, x:x+w] hair_mask = pix2pix.predict(hair_img) # 合并人像和背景 output_img = np.zeros_like(img) output_img[y:y+h, x:x+w] = mask * face_img + (1 - mask) * hair_mask # 显示结果 cv2.imshow('output', output_img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 希望这个框架对您有所帮助。请注意,这只是一个基本的框架,您需要根据自己的需求进行修改和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值