系统设计

权限系统设计

ε祈祈猫儿з 提交于 2020-02-21 19:03:04
权限系统设计 前言 权限管理是所有后台系统的都会涉及的一个重要组成部分,主要目的是对不同的人访问资源进行权限的控制,避免因权限控制缺失或操作不当引发的风险问题,如操作错误,隐私数据泄露等问题。 目前在公司负责权限这块,所以对权限这块的设计比较熟悉,公司采用微服务架构,权限系统自然就独立出来了,其他业务系统包括商品中心,订单中心,用户中心,仓库系统,小程序,多个APP等十几个系统和终端 1.权限模型 迄今为止最为普及的权限设计模型是RBAC模型,基于角色的访问控制(Role-Based Access Control) 1.1 RBAC0模型 RBAC0模型如下: 这是权限最基础也是最核心的模型,它包括用户/角色/权限,其中用户和角色是多对多的关系,角色和权限也是多对多的关系。 用户 是发起操作的主体,按类型分可分为2B和2C用户,可以是后台管理系统的用户,可以是OA系统的内部员工,也可以是面向C端的用户,比如阿里云的用户。 角色 起到了桥梁的作用,连接了用户和权限的关系,每个角色可以关联多个权限,同时一个用户关联多个角色,那么这个用户就有了多个角色的多个权限。有人会问了为什么用户不直接关联权限呢?在用户基数小的系统,比如20个人的小系统,管理员可以直接把用户和权限关联,工作量并不大,选择一个用户勾选下需要的权限就完事了。但是在实际企业系统中,用户基数比较大,其中很多人的权限都是一样的

20145333 《信息安全系统设计基础》第九周学习总结

落爺英雄遲暮 提交于 2020-02-21 07:29:20
20145333 《信息安全系统设计基础》第九周学习总结 教材学习内容总结 第十章 系统级I/O 10.1 Unix I/O I/O设备:网络、磁盘和终端 Unix I/O :将设备映射为文件的方式,允许Unix内核引出一个简单、低级的应用接口。 描述符:打开文件时,内核返回一个小的非负整数。 Unix外壳创建的每个进程开始时都有三个打开的文件:标准输入(描述符为0)、标准输出(描述符为1)、标准错误(描述符为2)。 改变当前的文件位置:文件位置为k,初始为0。 seek操作:显式地设置文件的当前位置为k。 EOF:是一个条件,而不是一个符号。 10.2 打开和关闭文件 1、open函数:打开一个已存在的文件或者创建一个新文件 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(char *filename,int flags,mode_t mode); open函数将filename转换为一个文件描述符,并且返回描述符数字。 返回的描述符总是在进程中当前没有打开的最小描述符。 O_ RDONLY :只读 O_ WRONLY :只写 O_ RDWR :可读可写 2、flag参数可以是一个或多个更多位掩码的或。 O_ CREAT:如果文件不存在,就创建它的一个截断的空文件 O_ TRUNC

信息安全系统设计基础第十一周学习总结

[亡魂溺海] 提交于 2020-02-20 01:04:31
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/wait.h> #include <unistd.h> #define DELAY 4 void child_code(int delay) { printf("child %d here. will sleep for %d seconds\n", getpid(), delay); sleep(delay); printf("child done. about to exit\n"); exit(17); } void parent_code(int childpid) { int wait_rv=0; /* return value from wait() */ wait_rv = wait(NULL); printf("done waiting for %d. Wait returned: %d\n", childpid, wait_rv); } int main() { int newpid; printf("before: mypid is %d\n", getpid()); if ( (newpid = fork()) == -1 ) perror("fork"); else if ( newpid == 0 )

信息安全系统设计基础第十二周学习总结

牧云@^-^@ 提交于 2020-02-20 01:00:05
信息安全系统设计基础第十二周学习总结 environ.c: 先通过 getenv函数 获取环境变量PATH的路径并显示;然后使用 函数setenv 改变PATH,然后再次显示: environvar.c: exec1.c: 通过 execvp函数 ,从环境变量所指目录中寻找ls文件并执行,然后将arglist数组传给要执行的ls文件。 执行完后直接结束,不会有结尾那一句输出。 exec2.c: 通过 execvp 寻找名为arglist数组第一个元素的文件,也是ls,然后把数组传递给它,进行执行。 也还是没有结尾的输出语句 exec3.c: 使用 execlp函数 寻找ls文件,然后将后面的两个参数作为该文件的参数,最后以空指针NULL结束 结尾仍没有输出语句 testmf.c: 使用 mkfifo函数 按照/tmp/mtfifo建立特殊的 fifo文件 ,参数0777为该文件的权限。如果成功,则显示FIFO已经创建。 FIFO 可以很好地解决在无关进程间数据交换的要求。 FIFO类型文件 同时具有 管道 的特性,在数据读出时,FIFO管道中同时清除数据。 consumer.c+producer.c: 根据操作系统所学知识,这应该是生产者和消费者两个进程相互通信的过程,所以需要打开两个终端分别运行。他们先创建一个FIFO文件,然后再进行进程通信读取数据。 函数memset 作用为

信息安全系统设计基础第十二周学习总结

落花浮王杯 提交于 2020-02-20 00:57:01
第八章代码 代码如下: #include <stdio.h> #include <unistd.h> int main() { char *arglist[3]; arglist[0] = "ls"; arglist[1] = "-l"; arglist[2] = 0 ;//NULL printf("* * * About to exec ls -l\n"); execvp( "ls" , arglist ); printf("* * * ls is done. bye"); return 0; } 可以看到这个代码中用了execvp函数。 表头文件: #include 定义函数: int execvp(const char file ,char const argv []); execvp()会从PATH 环境变量所指的目录中查找符合参数file 的文件名,找到后便执行该文件,然后将第二个参数argv传给该欲执行的文件。 如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno中。 把arglist中的参数传给ls命令,所以程序相当于命令 ls -l,即以长格式的形式查看当前目录下所有可见文件的详细属性。 所以运行结果如下: exec2 同exec1 运行结果如下: exec3 execlp()函数属于exec()函数族(exec(

信息安全系统设计基础第十二周学习总结

牧云@^-^@ 提交于 2020-02-20 00:53:50
实践 一、实践代码总结 1. execvp()函数 函数说明: execvp()会从PATH 环境变量所指的目录中查找符合参数file 的文件名,找到后便执行该文件,然后将第二个参数argv传给该欲执行的文件。 返回值 如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno中。 exec1.c: (源代码中第二个printf语句消失了,原因是调用execvp函数时,内核将新程序载入到当前进程,替代当前进程的代码和数据。) exec2.c: (exec2与exec1的区别就在于,execvp函数调用的语句变成了 execvp( arglist[0] , arglist ); 编译运行结果与exec1.c完全相同,说明arglist数组的第一项为要运行的程序的名称。) exec3.c: 2. fork()函数 函数说明: 在Unix/Linux中用fork函数创建一个新的进程。进程是由当前已有进程调用fork函数创建,分叉的进程叫子进程,创建者叫父进程。该函数的特点是调用一次,返回两次,一次是在父进程,一次是在子进程。两次返回的区别是子进程的返回值为0,父进程的返回值是新子进程的ID。子进程与父进程继续并发运行。如果父进程继续创建更多的子进程,子进程之间是兄弟关系,同样子进程也可以创建自己的子进程,这样可以建立起定义关系的进程之间的一种层次关系。

信息安全系统设计基础第五周学习总结

ε祈祈猫儿з 提交于 2020-02-19 23:07:54
第四章 处理器体系结构 4.1 Y86指令集体系结构 指令集体系结构,包括定义各种状态元素、指令集和他们的编码、一组编程规范和异常事件处理。 程序员可见的状态:Y86程序中的每条指令都会读取或修改处理器状态的某些部分。 8个程序寄存器:%eax、%ebx、%ecx、%edx、%esi、%edi、%esp、%ebp。存储一个字。 存储器:可以理解为很大的字节数组,保存着程序和数据。Y86用虚拟地址来引用存储器位置。 物理地址:硬件和操作系统软件联合将虚拟地址翻译成实际,指明数据实际保存在存储器的那个位置。 状态码Stat,表明程序执行的总体状态。 Y86指令:基本上是IA32指令集的一个子集。 指令编码 每条指令的第一个字节表明指令的类型。高四位是代码部分,第四位是功能部分。 !指令集的重要性质——字节编码必须有唯一的解释。 Y86异常 Y86程序 没有伸缩寻址模式; !以“.”开头的词是汇编器命令 YIS(指令集模拟器)目的是Y86机器程序代码的执行 一些Y86指令的详情 两个特别的指令组合需要注意! 4.2 逻辑设计和硬件控制语言HCL 逻辑门 AND &&. OR ||. NOT 组合电路——将很多逻辑门组合成一个网,构建计算块。 !两个限制: (1) 两个或多个逻辑门的输出不能连接在一起,否则它们可能会使线上的信号矛盾,可能会导致一个不合法的电压或电路故障; (2)

基于AD6655的数字直放站系统的设计

て烟熏妆下的殇ゞ 提交于 2020-02-16 08:07:35
基于AD6655的数字直放站系统的设计 http://www.c114.net ( 2009/5/18 13:23 ) 1 引言 随着 移动通信 业务的迅猛发展, 直放站 作为改善 移动 网信号弱区盲区的重要设备,以其具有投资较少、结构简单、安装方便灵活等优点广泛应用于2G移动网。而目前2G 网络 仍使用模拟设备的直放站。对于第三代移动通信系统,各国提出了多种不同标准,但要统一标准非常困难。未来的移动通信系统存在着多频、多模、多体制和多标准等问题,这就限制了各种设备的互通和兼容,因此对 软件无线电 技术在直放站中的应用提出了切实需求。为了提高 3G 直放站的性价比,采用数字技术统一3G直放站的硬件平台是一种较好的解决方案。这里提出了一种以AD6655为数字中频信号采集系统核心的通用、可扩展的硬件平台设计。 2 AD6655简介 2.1 性能特性 AD6655是 ADI 公司的一款高度集成的分集接收机,内置有低延迟的峰值检测器、RMS信号功率 监测 器、两个14bit的A/D转换器以及一个数字下变频转换器(DDC)。AD6655采用1.8 V和3.3 V供电电源;当工作在32.7~70 MHz带宽内,采样速率为150 MS/s时,SNR为74.0 dBc;而在70MHz带宽内,SFDR为84 dBc。因此,该器件适用于TD-SCDMA、 WCDMA 、 CDMA2000 、

自动灌溉系统设计

久未见 提交于 2020-02-10 12:07:09
自动灌溉系统设计(鸿控6) 2020-02-08 23:06 自动灌溉系统设计(鸿控6) 摘要: 水是所有生活过程中不可替代的基本要素,水资源是国民经济和社会发展的重要基础资源。中国是世界上最贫穷的13个国家之一、人均水资源为2300立方米,仅是世界人均水平的四分之一、在世界上排名第109。此外,时空的分布非常不均匀,有许多南部,北部,东部,西部,夏季和秋季,以及冬季和春季。 。近年来,随着人口增长,经济发展和城市化,水资源供需之间的矛盾日益严重。农业干旱和水资源短缺是制约中国经济和社会发展的重要因素,并且正在加剧生态环境。不好根据目前的用水量统计,该国在中等干旱年份的缺水量为358亿立方米,其中农业灌溉量为300亿立方米。自1990年代以来,中国受平均干旱影响的地区已超过2000万公顷,在660多个城市中,有一半以上受到水危机的打击。北部河流的流动问题变得更加突出。许多地区。由于地下水资源不足导致地下水过度利用,全国区域性地下水漏斗面积已达82,000平方公里。发达国家的农业用水通常约占总用水量的50%。目前,中国农业用水的比例已从1980年的88%下降到今天的约70%,并且还将继续下降,这使农业干旱和水资源短缺不可避免。北部地区的水资源开发和利用已经很高,开放源的潜力很小。南部仍有发展潜力,但主要集中在西南地区。 中国的农业灌溉用水量很大,灌溉效率降低和水浪费的问题很普遍。目前

大容量数据安全传输系统设计与实现(具体)

a 夏天 提交于 2020-02-06 18:18:10
大容量数据安全传输系统设计与实现(具体) 一、需求 两个主体间实现远程大容量数据文件秘密传输(超过1G大小的容量) 1)设计并实现支持大容量数据秘密传输的系统; 2)该系统支持数据完整性和来源验证; 开发坏境需求:windows平台,语言平台不限。 二、原理 (1)hash函数 hash函数是将任意长度的输入变换成固定长度输出的函数,该输出称为散列值。MD5是一种被广泛使用的hash函数,可以产生出一个128位的散列值,主要用于确保信息传输完整一致。MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过一系列处理后,算法输出由四个32位分组组成的128位散列值。具体的步骤如下所示: 1、填充 如果输入信息的长度(bit)对512求余的结果不等于448,就需要填充使得对512求余结果等于448,填充的方法是填充一个1和n个0。填充完成后,信息的长度为N* 512+448 2、记录信息长度 用64位内存来存储填充前信息长度。这64位加在第一步结果的后面,这样信息长度就变为N* 512 + 448 + 64 = (N+1)*512 3、装入标准的幻数 A=0X67452301L,B=0XEFCDAB89L,C=0X98BADCFEL,D=0X10325476L。 4、循环运算 把消息分以512位为一分组进行处理;每一个分组进行4轮变换