权限控制模型

权限控制模型

如果我们要设计权限控制,那么权限控制模型必须要调研下的。

我们可能需要知道:

  1. 使用需求场景
  2. 需要实现的编程语言(如果你是开发)

目前已知的模型有

# 模型名称 基本思路 适用场景
1 ACL(访问控制列表) 每个资源上维护一份“允许访问的用户清单” 文档管理/多人协作平台
2 DAC(自主访问控制) 资源所有者可自由决定谁能访问资源 文件共享系统…
3 MAC(强制访问控制) 系统对资源和用户打标签,权限强制遵守安全等级策略 军事、政府系统高安全要求平台
4 ABAC(基于属性的访问控制) 根据用户、资源、环境属性组合判断是否授权 多租户 SaaS 平台,条件多
5 RBAC(基于角色的访问控制) 权限-> 角色 -> 用户 企业后台系统
6 TBAC(基于任务的访问控制) 用户的权限是基于其当前执行的任务或角色 适用于以任务为中心的系统
7 T-RBAC( 基于任务和角色的访问控制模型) 任务和角色置于同等重要的地位任务,是RBAC 和TBAC能结合的基础 适用于以任务和角色控制为主的系统
8 OBAC(基于对象的访问控制) 以受控对象为中心构建访问控制机制 对象存储系统、OOP设计的系统等
9 UCON(使用控制模型) 主体、客体、权限 | 条件、义务、授权规则 。有四种可能的授权过程 试验型。涵盖了现代商务和信息系统需求中的安全和隐私问题

其中用户数比较多的web系统,用的RBAC 比较多,例如: 菜单、角色、用户

前端初开发体会

前端新体会

笔者对前端是基本没什么了解,纯纯小白一枚,公司开发需要写后台系统的页面和app的页面,记录一些经验

后台管理系统是用的vue3,笔者只在以前做过一个vue2的项目,还是copy的vue-admin-template的开源模版来做的,对vue只停留在使用elmentui和几个hook函数的认知阶段,js很多工具方法没用过,只会简单写个事件的方法和古老的 document文档元素(但其实也忘了 😅 )

然后css样式和布局也是一知半解 ,样式基本只会换个颜色和大小,位置也没搞清楚,基本只会copy其他ui库的文档demo来改改用。

  1. App.vue 页面是项目启动好像就会执行的,可以在这里做一下启动的初始化。

    vue的封装和抽离需要学学,比如把某些信息(例如登录信息)存到全局文件或者其他文件再将文件export,需要时直接import

  2. aximos请求库,封装到request.js文件,可以在这里做一下代理和请求/响应的 拦截,做一下请求头配置 例如:携带token 之类的。

  3. 其他modules可以放在项目里作库引用,例如一些ui库,sdk等等

  4. uniapp的布局内容需要计算,比如滚动列表的高度动态计算,

  5. uniappH5对接微信支付/支付宝支付 ,等需要比如微信微信环境,注册appid和secret,再微信浏览器环境拿到用户code ->去拿openId和accessToken -> 去拿userInfo 获取微信用户信息等等, openId需要存在全局,因为支付需要它, 使用支付提共的sdk方法调用。

  6. 开发调试,需要微信环境/支付宝环境 , 可以在chrome的netconditions替换UA为自定义,在把填入微信或者支付宝的 UA来可以模拟环境, 微信还可以手机usb链接PC端,调试微信的内置浏览器 —这样你可以在手机微信浏览器访问时,pc可以同步拿到f12的信息做调试,比如你要看token和网络请求等等。 使用流程 :a. 先手机usb连pc,手机usb设置为可以文件传输 b. 手机打开http://debugxweb.qq.com/?inspector=true ,c. pc在chrome打开 chrome://inspect/#devices

反思一下:遇到不少问题,其实每次都应该问自己,我要什么结果,然后拆分为要做什么 ->拆分为开发步骤 -> 再去通过代码实现

我会每次都在文档写好流程步骤再去开发,不然不清楚流程开发容易让人白做无用功,并且情绪化,容易增加心智负担。

总之还是需要多多积累和思考,笔者实力有限有限理解应该不全面或者错误,还请大家一起多多交流、指正.

thanks for your watch,have a good one 😃

工作的一些新体会

关于工作的一些体会

1. git 的一些新体会

笔者工作时懵逼 把master的内容合并提交到了dev

需要回退版本

后面使用了 git reset --hard[指定版本号commit id] 本地回退到上次提交前,然后强制推送 git push -f 覆盖了代码到仓库

git回退版本

git reset 默认是–mixed ,会撤回所有指定版本之后的提交, 将指定版本后面的内容回退到工作区。

⭐ 如果git reset 没指定commit id的话 默认是回退到上一个commit.

例如 git reset 是回退上一次commit ,git reset [commit id] 回退代码到此版本的提交时,此版本后面的内容返回到工作区

git reset [commit id] --soft 是回退到暂存区,不是工作区

git reset [commit id] --hard 撤回并清空工作区及暂存区所有修改 (慎用,因为会把指定版本后的所有内容清空,一定要备份好指定版本后面的代码内容。)

🌟 工作常碰到的冲突问题 : 当你和其他人都修改了同一文件, 那么其中一个人提交了远程仓库,另一个人会有两种无法pull的情况。

  1. 另一个人 代码还没commit,此时pull 同步时git会提示你 远程和本地有相同文件夹都修改了,提示你进行commit,

    那么我们可以先commit再pull同步 ------此时会有冲突,需要你手动解决后再commit ->push

  2. 另一个人 代码已经提交了,此时pull,git 会提示冲突 ,还是和上一步后面一样,手动本地解决冲突再push

所以如果有冲突时需要多和其他人沟通 ,比如谁在写某个文件时,你也要写该文件,则探讨一下修改内容或者等他修改你再改也行。。。

所以时不时pull一下代码,如果失败则说明远程的某些文件和本地文件对应的文件有不同的修改,需要沟通好以免继续写代码发现后面和同事重复写了某个文件,所以提前发现冲突要好很多,因为可能此时代码还没有冲突很多。

2.自定义starter

保姆级教程,手把手教你实现SpringBoot自定义starter-阿里云开发者社区 (aliyun.com)

mqtt学习

MQTT

device1 --sub-- /login 接受信息 --{“user”:“admin”}

broker —代理 — server-ip (消息转发/异步/削峰填谷)

device2 —publish-- /login {“user”:“admin”} --qos 服务质量 0 1 2

设备通过连接broker来互相通信.

背景说明

笔者是个java菜鸡,目前工作中接触了物联网方面也就是 IOT

自然也接触到了MQTT,我想记录记录也介绍下 MQTT

1.What is MQTT? 😲

MQTT 是一种轻量级的通讯协议,如 HTTP 类似用来发送和接受信息的,是专为资源受限的设备和低带宽、高延迟或不可靠的网络而设计.符合物联网设备的需求,因为可能有些时候设备比较边缘网络比较差等等原因,

这些物联网设备使用 MQTT 进行数据传输,因为它易于实施,并且可以有效地传输物联网数据。MQTT 支持设备到云端和云端到设备之间的消息传递。

2.How to Communicate ?

MQTT是一种类似消息队列的 发布–订阅模式 , Client 间的通信就靠 Topic 主题的订阅和推送进行.

MQTT不同于 MQTT 是有个 Broker–代理, MQTT 代理是协调不同客户端之间消息的后端系统。代理的职责包括接收和筛选消息、识别订阅每条消息的客户端,以及向他们发送消息。它还负责其他任务,例如:

  • 授权 MQTT 客户端以及对其进行身份验证
  • 将消息传递给其他系统以进行进一步分析
  • 处理错过的消息和客户端会话

MQTT 原理: 客户端和代理开始使用 MQTT 连接进行通信。客户端通过向 MQTT 代理发送 CONNECT 消息来启动连接。代理通过响应 CONNACK 消息来确认已建立连接。MQTT 客户端和代理都需要 TCP/IP 堆栈进行通信。客户端从不相互联系,它们只与代理联系

例如下面: 一个客户端发布一个订阅, 每个客户端都可以发布和订阅 ,中间是需要靠 broker 转发订阅的消息的

img

MQTT publish

MQTT 客户端以字节格式发布包含主题和数据的消息。客户端确定数据格式,例如文本数据、二进制数据、XML 或 JSON 文件。例如,智能家居系统中的灯可能会针对主题 livingroom/light 发布消息 on

MQTT subscribe

MQTT 客户端向 MQTT 代理发送 SUBSCRIBE 消息,以接收有关感兴趣主题的消息。此消息包含唯一标识符和订阅列表。例如,您手机上的智能家居应用程序想要显示您家中有多少灯亮着。它将订阅主题 light 并增加所有 on 消息的计数器。

*** MQTT 通过 Qos 来决定推送消息的模式**

  • QoS 0,最多交付一次。

  • QoS 1,至少交付一次。

  • QoS 2,只交付一次。

其中,使用 QoS 0 可能丢失消息,使用 QoS 1 可以保证收到消息,但消息可能重复,使用 QoS 2 可以保证消息既不丢失也不重复。QoS 等级从低到高,不仅意味着消息可靠性的提升,也意味着传输复杂程度的提升。

**在一个完整的从发布者到订阅者的消息投递流程中,QoS 等级是由发布者在 PUBLISH 报文中指定的,大部分情况下 Broker 向订阅者转发消息时都会维持原始的 QoS 不变。不过也有一些例外的情况,根据订阅者的订阅要求,消息的 QoS 等级可能会在转发的时候发生降级。 **

MQTT 的文件传输

是一种基于 TCP 的物联网通信协议,其 Payload 可以容纳任意类型的数据,例如文本、二进制、JSON、XML 等多种格式。这种灵活性使得 MQTT 在物联网应用中拥有广泛的适用性,能够满足不同场景下多样化数据传输的需求。

文件传输客户端开发 | EMQX 企业版文档

🔚 暂时理解这么些,其余后面再补充 Thanks~

一些开发中的术语介绍.md

背景介绍

笔者最近关注到一些开发中的术语,但是属于架构或者服务方面的,对刚进门的开发来说接触式属于比较少的,所以想记录一些

术语


术语 说明
QOS Quality of Service)即"服务质量"
QPS Queries Per Second 意思是“每秒查询率”
TPS 是 TransactionsPerSecond 的缩写,也就是事务数/秒
RT 响应时间 RT(Response-time) ,请求开始到响应结束的时间

一些组件或者中间件

name desc
SkyWalking 链路追踪用的
RabbitMQ 消息队列,异步,用作削峰填谷
RocketMQ 消息队列
Kafka
zookiper 链路追踪
Prometheus (普罗米修斯)监控系统

函数式编程

函数编程

什么是函数,函数就是一种规则,当我们输入x后,根据规则输出返回f(x)计算的结果给我们,f(x) 就是函数

合格的函数

✅一个合格的函数

我们的规则需要不可变,也就是 函数内部的逻辑不可以依赖可变的外部数据

函数对象

函数对象的语法格式

如下:

1
2
//参数 -> 逻辑部分
student -> student.sex.equal("男")

这就是一个函数对象,(解析:返回student的性别是否是男性的boolean值)

🔴 函数对象接口定义写法 如下:(也就是函数式接口,可以使用lambda匿名函数

🔵 如果希望该接口更通用、可扩展 即可使用 泛型T 来做函数方法的返回值

1
2
3
interface [函数对象名称] {
[一个函数方法]
}

记得lambda表达式要看成是一个函数对象

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//  ****  函数式接口的定义 ---加上泛型更具扩展性 ******//

@FunctionalInterface
interface Type2{
Object get();
}
/**
* 接受任意类型实现与返回
* @param <T>
*/
@FunctionalInterface
interface Type1<T>{
T get();
}
/**
* 接受任意类型实现与返回,接受任意参数
* @param <T>
*/
@FunctionalInterface
interface Type3<O,I>{
O get(I i);
}

函数对象的好处​ :happy:

行为参数化

我们可以以此写出一些通用性的方法,

应用场景:一些重复代码比较多的函数,

比如遍历一个数组students(里面有一些student对象),需要根据student性别或者年龄或者其他参数来筛选

🌵 我们就可以使用行为参数化来实现不同的筛选条件,而不必每种不同的筛选条件都写一个新方法。

在函数参数多加一个函数对象 (下面的 Lambda 是已经定义好的函数接口) ,在逻辑部分使用函数调用函数对象内的方法

例如:

通用性函数

🔴 调用方式

调用方式

方法引用

如图,是lambda表达式的简写版本

👍 tips: 只要注意方法引用的方法需要什么参数才能执行,即可推断出lambda写法

方法引用与lambda等价写法

JDK 中的函数式接口

其实jdk中已经定义好了一些函数式接口方便我们使用,满足我们大部分的需求了,所以我们基本不需要自定义了,直接调用就行

🔴这是jdk中我们常用的函数式接口 ,lambda写法对应参数与返回值如下

常见函数式接口特点

附上梳理图

梳理

方法引用类型和Stream流:

  1. 类名: : 静态方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Stream.of(
    new Student("张三",18),
    new Student("李四",20)
    ) //打印
    // .forEach((stu)->System.out.println(stu) ) #lambda写法
    .forEach(Method01::printStudent) //静态方法引用 写法
    ....

    public class Method01{
    public static void printStudent(Student stu){
    System.out.println(stu)
    }
    }
  2. 类名: : 非静态方法

    1
    2
    3
    //参数-->逻辑
    Student::getName ->stu.getName()

水一篇

🌊 水一篇文章

六月了,昨天和朋友第一次体会他们喝酒玩色子 🎲 的规则。我了解到他们所谓的规则

每人有5个骰子,每次每个人都要说一组数字(比如3个1、6个6等等),这组数字是
骰子数量*点数

需要每次的说出的这组数字的骰子数量或者点数要比上一组说的大(比如上一个人说了3个1,轮到你可以说3个2或者4个1等等),也可以说开(开代表着所有玩家亮出骰子,如果上一个人说的条件
——在场所有玩家的骰子点数和数量满足他所说的那组数字 (例如3个2必须有或者多于3个2的点数)
——不符合则他输,否则你输)
🔴1默认是个万能点数(可以看作其他点数),有时只能作为1的点数。

斋:默认是1为万能点数
破斋:1无法作为万能点数,只能作为1,如果有人说的那组数 骰子数量小于上一个人 那么就可以说是破斋了

其余还有劈,反劈等等这些,笔者也不懂只是了解了大概。

最后还是说,这只是个为了喝酒娱乐而设计的小游戏,主要是靠一些心理博弈,输了也没什么惩罚就是喝一杯。

有的人觉得好玩,有的人觉得无聊(笔者就是,其实是不太喜欢这种场合呵呵)。

✌️ have a nice time!

端午安康🦆

人生第二次面试

我想分享我的第二次面试的经历,笔者是个毕业一年的fw大专程序员 😢

故事

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
	笔者姑且算个不合格的程序员,技术局限在java语言和一些框架的应用,
对源码和算法没有什么深入了解,算是个copy
码农。已经失业半年了,然而笔者不甘心仍然想继续在计算机行业发展,
近期简历被一个中小企业邀请去面试了。我大为欣喜,
一天时间基本把面试题和基本技术要求看了七七八八,其实好久没写代码了我。 :D
虽然但是没想到在面试那天下午我发现有6个哥们来面试和我一样的岗位,
不过当时我想也正常,择优筛选嘛。
人事先给我们发了张java笔试卷子,基本没什么难度,
我做完后来了个类似资深程序员和我一对一谈话(应该大部分小公司面试流程都这样的吧)。
重点来了,谈话过程就不详谈了,该公司需要的是全栈工程师...
说项目很多基本可能要一个人负责一个项目而且进度也可能要自己把握自己交付。
我顿时感觉不对就问你们是外包吗,他说也有承接项目和自研项目。
好吧,我觉得这个不好说,但是我进去就是独立做外包项目给他们,
我感觉又要gg了。大中公司不要我,小公司想拉扯我...
真的还有必要继续坚持java开发么?
生活来源需要钱,可是继续没工作->投简历这段时间很挂逼。
我是上过班的,我明白上班后996的辛苦和每天回家一个人的emo时间,
我不明白上班的意义,而且每天伏案打代码,现在身体腰椎颈椎都时不时疼痛,
时常头晕得难受,身体越来越虚。眼睛度数不知道又加剧了多少,
家里人只是希望我能工作,我没什么朋友,我上班又会积攒很多负面情绪,
一直觉得自己干啥不行。那段上班时间我差点抑郁了,所以我离职了。
在别人看来我很矫情吃不了苦,我也确实承认有一部分。
打算放弃java放弃计算机了,可能真的不适合我。

以上是笔者真诚得心路历程和想法,谢谢

💇

git的emoji图标注释

gitmoji

有时我们会想在git上使用emoji来轻松一下我们的内容,所以就涉及了这个网站

gitmoji | An emoji guide for your commit messages

这里是各种emoji的使用方式

例如:

🎨

🔥

🐛 (bug)

📝

🚀

💩

💡

💬

🔇

🤡

🔍

😃

💢

😠

:happy:

等一些emoji,其实很写法简单,就是 : 英文名称: 比如🐛 只需输入: bug :(要使用英文标点)

but

😱 但是有个问题…

Hexo默认的markdown渲染引擎hexo-renderer-marked已经不再支持将Github emoji渲染到静态的html中

所以直接使用在文章发布后你会发现没有emoji,所以得稍稍配置一下…(我直接百度🐶 )

使用插件

这里推荐的是 hexo-renderer-markdown-it 渲染器,支持扩展,采用的是 markdown-it 的内核来解析 markdown 的文本。

第一步

在你的blog目录下

先卸载掉原来的hexo-renderer-marked,然后下载新的插件hexo-renderer-markdown-itmarkdown-it-emoji

1
2
3
4
npm un hexo-renderer-marked -S
npm i hexo-renderer-markdown-it -S

npm i markdown-it-emoji markdown-it-task-lists -S

第二步

❗ 在你的根目录的 _config.yaml下添加下面这段配置(注意是根目录blog下的 _config.yaml)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#让hexo支持emoji增加的插件配置  
markdown:
render:
html: true # 在 markdown 文本中支持 html tag 标签
xhtmlOut: false # 需要 xtml 文档,使用 <br /> 替代 <br>
breaks: true # 用 <br> 开始新的一行
linkify: true # 自动将 可能是链接的内容转换成链接
typographer: true # 印刷标识转换
plugins:
- markdown-it-abbr
- markdown-it-footnote
- markdown-it-ins
- markdown-it-sub
- markdown-it-sup
- markdown-it-emoji
- markdown-it-task-lists
anchors:
level: 2
collisionSuffix: ''
permalink: false,
permalinkClass: 'header-anchor'
permalinkSymbol: ''
case: 0
separator: ''

然后提交就ok了

以上步骤应该就能支持emoji了

参考文章 :

hexo中使用emoji表情 | 苏苏の休憩小屋 (luckysusu.top)

Hexo 中使用 emoji 和 tasks - 知乎 (zhihu.com)

部分emoji使用编码参考 🧐

人物 自然 事物 地点
😐 :neutral_face: ☀️ :sunny: 💝 :gift_heart: 🏠:house:
😄 :smile: ❄️ :snowflake: 🎁 :gift: 🏫:school:
😍 :heart_eyes: ☔️ :umbrella: 🎏 :flags: 🏥:hospital:
😘 :kissing_heart: ☁️ :cloud: 🔔 :bell: 🗾:japan:
😓 :sweat: ⚡️ :zap: 🎄 :christmas_tree: 🏭:factory:
😤 :triumph: 🐷 :pig: ☎️ :phone: ✈️:airplane:
😨 :fearful: 🐗 :boar: 🔉 :sound: 🚲:bike:
😎 :sunglasses 🐑 :sheep: 📢 :loudspeaker: 🚕:taxi:
😭 :sob: 🐁 :mouse2: 📰 :newspaper: 🚌:bus:

详细请看参考文章或者文档 ,附上git支持emoji地址gitmoji

  • Copyrights © 2023-2025 IceBlin
  • Visitors: | Views:

thanks,but no~~

支付宝
微信
//引入