首页 文章 精选 留言 我的

精选列表

搜索[电机控制],共10000篇文章
优秀的个人博客,低调大师

Casbin+Gin+XORM的权限控制demo(三)

之前的两篇文章,我们做demo的时候,把所有的代码都写在main.go里.在进一步深入学习casbin之前,把代码做一次重构.重构完成后,目录结构是这样的: 首先,把配置文件rbac_models.conf移到conf目录下. 其次,把main.go初始化casbin的代码,放到service/casbin.go里,代码如下: package service import ( "log" "github.com/casbin/casbin/v2" xormadapter "github.com/casbin/xorm-adapter/v2" _ "github.com/go-sql-driver/mysql" ) var Enforcer *casbin.Enforcer // 初始化casbin func CasbinSetup() { a, err := xormadapter.NewAdapter("mysql", "rbac:123456@tcp(127.0.0.1:3306)/rbac_db?charset=utf8", true) if err != nil { log.Printf("连接数据库错误: %v", err) return } e, err := casbin.NewEnforcer("conf/rbac_models.conf", a) if err != nil { log.Printf("初始化casbin错误: %v", err) return } Enforcer = e } 第三步,把main.go里关于拦截器的部分,放到middleware/middleware.go里,代码如下: package middleware import ( "demo/service" "fmt" "github.com/gin-gonic/gin" ) //拦截器 func Authorize() gin.HandlerFunc { return func(c *gin.Context) { // var e *casbin.Enforcer e := service.Enforcer //从DB加载策略 e.LoadPolicy() //获取请求的URI obj := c.Request.URL.RequestURI() //获取请求方法 act := c.Request.Method //获取用户的角色 sub := "admin" //判断策略中是否存在 if ok, _ := e.Enforce(sub, obj, act); ok { fmt.Println("恭喜您,权限验证通过") c.Next() } else { fmt.Println("很遗憾,权限验证没有通过") c.Abort() } } } 第四步,把main.go里的 r.GET("/api/v1/hello", func(c *gin.Context) { fmt.Println("Hello 接收到GET请求..") }) 这部分代码,放到controller/hello.go里,代码如下: package controller import ( "fmt" "net/http" "github.com/gin-gonic/gin" ) func Hello(c *gin.Context) { fmt.Println("Hello 接收到GET请求..") c.JSON(http.StatusOK, gin.H{ "code": 200, "msg": "Success", "data": "Hello 接收到GET请求..", }) } 第五步,把main.go里路由部分的代码,放到routers/router.go里,代码如下: package routers import ( "demo/controller" "demo/middleware" "github.com/gin-gonic/gin" ) func InitRouter() *gin.Engine { //获取router路由对象 r := gin.New() //使用自定义拦截器中间件 r.Use(middleware.Authorize()) //创建请求 r.GET("/api/v1/hello", controller.Hello) return r } 经过这样改造后,main.go里的内容就少多了: package main import ( "demo/routers" "demo/service" ) func init() { service.CasbinSetup() } func main() { r := routers.InitRouter() r.Run(":9000") //参数为空 默认监听8080端口 } 最后使用postman模拟访问,输出如下:

优秀的个人博客,低调大师

Casbin+Gin+XORM的权限控制demo(二)

casbin的增删查(casbin没有update的API,如果需要更新policy,那么只有先删除再添加) 还是直接上代码 package main import ( "fmt" "log" "github.com/casbin/casbin/v2" xormadapter "github.com/casbin/xorm-adapter/v2" "github.com/gin-gonic/gin" _ "github.com/go-sql-driver/mysql" ) func main() { a, err := xormadapter.NewAdapter("mysql", "rbac:123456@tcp(127.0.0.1:3306)/rbac_db?charset=utf8", true) if err != nil { log.Printf("连接数据库错误: %v", err) return } e, err := casbin.NewEnforcer("rbac_models.conf", a) if err != nil { log.Printf("初始化casbin错误: %v", err) return } //从DB加载策略 e.LoadPolicy() //获取router路由对象 r := gin.New() //增加policy r.POST("/api/v1/add", func(c *gin.Context) { fmt.Println("增加Policy") if ok, _ := e.AddPolicy("admin", "/api/v1/world", "GET"); !ok { fmt.Println("Policy已经存在") } else { fmt.Println("增加成功") } }) //删除policy r.DELETE("/api/v1/delete", func(c *gin.Context) { fmt.Println("删除Policy") if ok, _ := e.RemovePolicy("admin", "/api/v1/world", "GET"); !ok { fmt.Println("Policy不存在") } else { fmt.Println("删除成功") } }) //获取policy r.GET("/api/v1/get", func(c *gin.Context) { fmt.Println("查看policy") list := e.GetPolicy() for _, vlist := range list { for _, v := range vlist { fmt.Printf("value: %s, ", v) } } }) //使用自定义拦截器中间件 r.Use(Authorize(e)) //创建请求 r.GET("/api/v1/hello", func(c *gin.Context) { fmt.Println("Hello 接收到GET请求..") }) r.Run(":9000") //参数为空 默认监听8080端口 } //拦截器 func Authorize(e *casbin.Enforcer) gin.HandlerFunc { return func(c *gin.Context) { //获取请求的URI obj := c.Request.URL.RequestURI() //获取请求方法 act := c.Request.Method //获取用户的角色 sub := "admin1" //判断策略中是否存在 if ok, _ := e.Enforce(sub, obj, act); ok { fmt.Println("恭喜您,权限验证通过") c.Next() } else { fmt.Println("很遗憾,权限验证没有通过") c.Abort() } } }

优秀的个人博客,低调大师

扩展Python控制台实现中文反馈信息

"中文编程"知乎专栏原文地址 参考了周蟒的实现, 运行效果如下: $ python3 解释器.py Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 05:52:31) [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwin Type "help", "copyright", "credits" or "license" for more information. (ZhPyConsole) >>> 学 Traceback (most recent call last): File "<console>", line 1, in <module> 命名错误: 命名'学'未定义 >>> for i in range(1,4): ... 生 ... Traceback (most recent call last): File "<console>", line 2, in <module> 命名错误: 命名'生'未定义 完整源码在: 解释器.py 相关源码如下, 即改写InteractiveInterpreter.showtraceback方法. 仅为演示之用, 直接用了字符串替换.: def showtraceback(self): sys.last_type, sys.last_value, last_tb = ei = sys.exc_info() sys.last_traceback = last_tb try: 行 = traceback.format_exception(ei[0], ei[1], last_tb.tb_next) 汉化行 = [] if sys.excepthook is sys.__excepthook__: for 某行 in 行: for 英文 in self.字典: 某行 = 某行.replace(英文, self.字典[英文]) 汉化行.append(某行) self.write(''.join(汉化行)) else: # If someone has set sys.excepthook, we let that take precedence # over self.write sys.excepthook(ei[0], ei[1], last_tb) finally: last_tb = ei = None 定制sys.excepthook貌似更为合适, 还需研究如何实现. 参考资料 周蟒-zhpy 2019-02-10

优秀的个人博客,低调大师

搭建私有git服务器进行版本控制

一、安装git 分别在服务器和本地安装最新版本的git 1、服务器上源码安装最新版git 通常centos上使用yum源安装的git版本过低 检查系统上是否已经安装git,若已有则卸载 // 查看当前git版本# git --version git version1.7.1// 卸载旧版本# yum remove -y git 安装依赖包,下载最新版本git源码 #yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel#wget https://github.com/git/git/archive/v2.13.2.tar.gz#tar zxf v2.13.2.tar.gz 安装git,配置环境变量 #cdgit-2.13.2#make prefix=/usr/local/git all#make prefix=/usr/local/git install#echo"export PATH=$PATH:/usr/local/git/bin">> /etc/bashrc#source/etc/bashrc // 实时生效 查看git版本号,正确显示则安装成功 # git --version gitversion2.13.2 若编译时报错如下 libgit.a(utf8.o): Infunction`reencode_string_iconv': /usr/local/src/git-2.13.2/utf8.c:463: undefined reference to `libiconv' libgit.a(utf8.o): Infunction`reencode_string_len': /usr/local/src/git-2.13.2/utf8.c:524: undefined reference to `libiconv_open' /usr/local/src/git-2.13.2/utf8.c:535: undefined reference to `libiconv_close' /usr/local/src/git-2.13.2/utf8.c:529: undefined reference to `libiconv_open' collect2: ld returned 1exitstatus make: *** [git-credential-store] Error 1 可以按照如下方式解决 // 对之前git的make 操作进行 make clean#make clean#wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz#tar zxf libiconv-1.14.tar.gz#cdlibiconv-1.14#./configure --prefix=/usr/local/libiconv#make && make install // 创建一个软链接到/usr/lib#ln -s /usr/local/lib/libiconv.so /usr/lib#ln -s /usr/local/lib/libiconv.so.2 /usr/lib 然后 #make configure#./configure --prefix=/usr/local/git --with-iconv=/usr/local/libiconv/#make && make install#echo"export PATH=$PATH:/usr/local/git/bin">> /etc/bashrc#source/etc/bashrc 配置git 用户名及邮箱 #git config --global user.name'your name'#git config --global user.email'your email address' 2、本地安装最新版git(此处演示为Windows上安装) windows上安装直接下载最新版安装包,双击->下一步… 即可完成安装 所有选项默认即可 打开 git-bash,配置git 用户名和邮箱,同服务端配置第6步 想要学习Java高架构、分布式架构、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战学习架构师视频免费获取 架构群:835544715 点击链接加入群聊【JAVA高级架构】:https://jq.qq.com/?_wv=1027&k=5dbERkY 二、服务器设置 1、添加一个git用户,为安全起见禁用shell登录 # useradd git // 为安全起见,禁用 git 用户的shell登录 #vim/etc/passwd // 修改 git 用户的shell为 git-shell,路径使用 which git-shell查看 // 找到如下一行 git:x:1001:1001::/home/git:/bin/bash // 修改成如下 git:x:1001:1001::/home/git:/usr/local/git/bin/git-shell 2、初始化一个项目目录为一个仓库 // 进入到项目目录# git init 3、将该目录克隆成为裸仓库(作为中介)并设置裸仓库所有者为git用户 // 创建一个裸仓库#gitclone--bare ProjectPath /srv/myProject.git 4、将裸仓库添加为远程仓库 // 进入到项目目录# git remote add origin /srv/myProject.git// 修改远程仓库所属主和所属组# chown -R git.git /srv/myProject.git 5、将服务器上的项目添加到远程仓库即 /srv/myProject.git #git add .#git commit -m'comment'#git push origin master 6、在该用户的家目录下面保存本地用户的公钥 #su git$cd~$make .ssh$chmod 700 .ssh$cd.ssh$touch authorized_keys$chmod 600 authorized_keys // 然后在 authorized_keys 文件中加入本地用户的公钥 id_rsa.pub 7、打开git服务器的RSA认证 # vim /etc/ssh/sshd_config//找到下面3行并去掉注释1.RSAAuthenticationyes 2.PubkeyAuthenticationyes 3.AuthorizedKeysFile .ssh/authorized_keys 三、本地设置(Windows端) 1、生成公钥并交给服务端 // 打开 git-bash,生成公钥 $ ssh-keygen-t rsa// 在用户目录下的.ssh目录里面会生成 id_rsa, id_rsa.pub// 将 id_rsa.pub 里的内容拷贝到服务器上 2、在保存公钥的同级目录下面新建config文件指定ssh端口(可选) ==类似使用搬瓦工VPS的可能默认ssh端口不是22的需要配置这个== Host your domain nameorserver ip User 服务端添加的git用户名 Hostname your domain nameorserver ip Port ssh 端口 IdentityFile ~/.ssh/id_rsa 3、从服务器克隆项目到本地 $gitcloneyrscgit@yrsc0597.com:/srv/yrsc.git 4、添加远程仓库 四、测试 本地更改,添加,删除项目,然后推送修改到远程仓库 服务器项目目录下拉取最新的版本

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册