当前位置: 首页 > wzjs >正文

电商网站开发需要掌握哪些知识技能深圳网络公司招聘

电商网站开发需要掌握哪些知识技能,深圳网络公司招聘,增城新塘网站建设,电商付费推广有哪些自我简介:4年导游,10年程序员,最近6年一直深耕低代码领域,分享低代码和AI领域见解。 这篇文章是技术栈基于:gin casbin jwt-go 前期目标是实现简单的基于角色的用户权限管理系统,后期改造成提供权限判断和…

自我简介:4年导游,10年程序员,最近6年一直深耕低代码领域,分享低代码和AI领域见解。

这篇文章是技术栈基于:gin + casbin + jwt-go 前期目标是实现简单的基于角色的用户权限管理系统,后期改造成提供权限判断和身份验证的微服务。

对于gin框架可以参照我写的这篇文章:
基于Golang的开发框架Gin实战

这篇文章构建的项目结构跟上一篇类似,唯一修改的地方是将 routes 路由文件夹下的web.go 文件拆分为 web.goapi.go , 也就是将web路由和api接口路由分开了。如果熟悉Laravel框架的人肯定知道这就是模仿Laravel项目结构创建的。

路由文件拆分

web.go具体代码如下:

package routesimport ("github.com/gin-gonic/gin""accbase/app/Controllers"
)func InitRouter()  *gin.Engine{r := gin.Default()r.Static("/public", "./public") // 静态文件服务r.LoadHTMLGlob("views/**/*") // 载入html模板目录// web路由r.GET("/", Controllers.Home)r.GET("/about", Controllers.About)r.GET("/post", Controllers.Post)r.GET("/user", Controllers.User)// api 路由InitApi(r) // 这里是关键点,会初始化api路由return r
}

api.go文件内容如下:

主要是 InitApi 函数的封装

package routesimport ("github.com/gin-gonic/gin""accbase/app/Controllers"
)func InitApi(r *gin.Engine){// 简单的api路由组: v1v1 := r.Group("/api"){v1.GET("/ping", Controllers.Ping)v1.POST("/token", Controllers.GetToken)v1.POST("/user/info", Controllers.UserInfo)v1.POST("/user/create", Controllers.UserCreate)v1.POST("/user/delete", Controllers.UserDestroy)v1.POST("/user/update", Controllers.UserUpdate)v1.GET("/users", Controllers.UserFindAll)}}

jwt-go身份认证库

jwt-go仓库地址

先实现token令牌办法函数:

type Params struct {Username string `json:"username"`Password string `json:"password"`
}func GetToken(c *gin.Context)  {var json  Paramserr := c.BindJSON(&json)if err != nil {fmt.Printf("mysql connect error %v", err)return}hmacSampleSecret := []byte("my_secret_key")token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{"username": json.Username,"password": json.Password, // 21219256@qq.com"nbf": time.Date(2015, 10, 10, 12, 0, 0, 0, time.UTC).Unix(),})tokenString, err := token.SignedString(hmacSampleSecret)fmt.Println(tokenString, err)c.JSON(200, gin.H{"token": tokenString,})
}

路由/api/token 指向的控制器是 Controllers包下的GetToken 函数,也就是上面代码片段。在postman 里测试结果如下:

在这里插入图片描述

通过JSON的数据格式交互,在body体里通过json对象

{"username":"winyh","password":"2712191010@qq.com"
}

经过后台jwt-go库对这两个字段和my_secret_key做算法加密,颁发token令牌如下:

{"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE0NDQ0Nzg0MDAsInBhc3N3b3JkIjoiMjcxMjE5MTAxMEBxcS5jb20iLCJ1c2VybmFtZSI6IndpbnloIn0.rXKxC1P9wMUlUvK2clf45oEban--7D4nZ37Ehx-CGmU"
}

日常开发过程中,前端工程师通过用户名,密码/邮箱等信息通过登录接口获取token,然后存储到本地。每次请求的时候,放在 header头里,后端获取 header 头里的 token和前后端约定的加密串my_secret_key.来识别(逆向解析)当前请求对象的信息。接下来演示下,通过token值获取当前用户信息。

路由/api/user/info 指向的控制器是 Controllers包下的UserInfo 函数,也就是下面的函数代码片段

func UserInfo(c *gin.Context)  {hmacSampleSecret := []byte("my_secret_key")tokenString := c.Request.Header.Get("token")// tokenString := "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIiLCJuYmYiOjE0NDQ0Nzg0MDB9.-BRTwjN-sAlUjO-82qDrNHdMtGAwgWH05PrN49Ep_sU"token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {// Don't forget to validate the alg is what you expect:if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"])}// hmacSampleSecret is a []byte containing your secret, e.g. []byte("my_secret_key")return hmacSampleSecret, nil})if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {fmt.Println(claims["username"], claims["nbf"])c.JSON(200, gin.H{"username": claims["username"],"password": claims["password"],})} else {fmt.Println(err)c.JSON(200, gin.H{"message": "获取失败!",})}
}

在Postman里演示效果如下:

在这里插入图片描述

在 header头里填入/api/token接口里返回的token值,成功返回了当前用户信息。

Casbin权限管理库

官方文档Casbin

刚开始看这个库的时候是一脸懵逼,感觉好高大上的样子。后来按照文档,一点点理解,发现实现起来还是很方方便的。这个库实现的是权限管理,并不实现身份认证,所以上文将身份认证的事情交给了 jwt-go 库来实现。

两个核心概念:

访问控制模型model和策略policy

需要配置两个文件

控制模型:model.conf

[policy_definition]
p = sub, obj, act[role_definition]
g = _, _[policy_effect]
e = some(where (p.eft == allow))[matchers]
m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act

策略:policy.csv

p, alice, data1, read
p, alice, data1, write
p, bob, data2, write
p, data2_admin, data2, read
p, data2_admin, data2, write
g, alice, data2_admin

我测试的时候这两个文件方在本地casbin文件夹,用接口 /api/ping来做访问测试,这个接口对应函数如下:

func Ping(c *gin.Context) {e := casbin.NewEnforcer("./casbin/model.conf", "./casbin/policy.csv")sub := "alice" // the user that wants to access a resource.obj := "data1" // the resource that is going to be accessed.act := "write" // the operation that the user performs on the resource.//  注意点:这里的数据一把都是从数据库拿到的 ,数据库里记录了模型文件对应的策略信息。Casbin 根据策略字段判断是否有权限var msg stringif e.Enforce(sub, obj, act) == true {fmt.Println("进入了")msg = "进入了"} else {fmt.Println("拒绝了")msg = "无权访问"}c.JSON(200, gin.H{"message": msg,})
}

Postman 测试截图如下:

在这里插入图片描述

如果把策略文件里把 alice 对 data1 的操作权限 write 改为 read ,再次访问就会被拒绝了。

p, alice, data1, read

文章写的比较粗糙,主要罗列了下实现重点,不懂的可以交流下。

AI时代,对各行业的冲击力只会越来越大,随着AI大模型的竞赛,越来越多强悍的AI模型都会涌现,像软件开发行业的很多工作都会被取代。软件将不再是程序员的专属产物,会由AI创建很多的软件产品。

4年导游,10年程序员,深耕低代码领域6年,持续分享低代码和AI领域领域有价值的思考和沉淀,欢迎关注:winyh5

后续会推出:【挑战365天做 100 套常见的互联网系统】系列文章,让大家可以真实感受到低代码快速落地项目的可行性


文章转载自:

http://uyKJb6SJ.bqwsz.cn
http://2UG11zws.bqwsz.cn
http://kFu1u5t9.bqwsz.cn
http://8x1FREL4.bqwsz.cn
http://tSFhNlp7.bqwsz.cn
http://sPjEIkFf.bqwsz.cn
http://PSPSEgPW.bqwsz.cn
http://Te67LLOJ.bqwsz.cn
http://TCG2h0pM.bqwsz.cn
http://Em9MH0WD.bqwsz.cn
http://o80ct2qd.bqwsz.cn
http://jiTJWEZd.bqwsz.cn
http://kKjHEhUM.bqwsz.cn
http://Cz5UhbYk.bqwsz.cn
http://ayYEa6LB.bqwsz.cn
http://NuY4O9kJ.bqwsz.cn
http://xs6E9unF.bqwsz.cn
http://wdeU1zab.bqwsz.cn
http://AjD7GgTc.bqwsz.cn
http://FC6RHwx8.bqwsz.cn
http://odane5aP.bqwsz.cn
http://TEVVh8eN.bqwsz.cn
http://lFpZtRtJ.bqwsz.cn
http://6wbY0Wnp.bqwsz.cn
http://BT6eaITB.bqwsz.cn
http://qcp3HmDP.bqwsz.cn
http://GgDPT4wx.bqwsz.cn
http://iWsyJqdZ.bqwsz.cn
http://S4uUVYLw.bqwsz.cn
http://K08CkDpa.bqwsz.cn
http://www.dtcms.com/wzjs/639120.html

相关文章:

  • iis 网站无法访问手机网站 php
  • 做的好看的国内网站欣赏发布网页
  • 代做一个网站多少钱复古网站设计
  • 石家庄网站快速备案wordpress结合cms
  • 怎么创造一个网站做外卖有哪些网站
  • 设计和建设一个网站要多少钱wordpress 门户主题
  • 网站建设怎样布局环保h5微网站
  • 网站一起做网店制作微信小程序步骤
  • 深圳网站建设公司专业正确的网址格式输入
  • 网站做任务佣金石家庄制作网站推广
  • 成都公园城市建设局网站查公司的国家网站有哪些
  • 网站大全2021wordpress解压后怎么安装
  • 做网站怎么把字弄图片上去手机上怎么提取公积金
  • 长春新建高铁站买房子平台
  • 怎么给网站做spm可以做免费广告的网站有哪些
  • 哪里有门户网站开发中国建设银行的官方网址
  • 电子商城网站和15岁女儿做很舒服网站
  • 白酒网站建设怎么使用网站程序
  • 公司建立网站的必要性山东广饶建设银行网站
  • 重庆响应式网站平台wordpress 100并发
  • dw自己做的网站手机进不去做渠道该从哪些网站入手
  • html购物网站怎么做与别人相比自己网站建设优势
  • 上海黄浦网站建设如何把电脑改成服务器做网站
  • vmware 下wordpress网站优化排名公司
  • 深圳最简单的网站建设网站维护的注意事项
  • 大型网站建设哪个好东莞市房产管理局官网
  • 帝国网站管理系统前台海报模板图片
  • 高端响应式网站设计怎么识别一个网站
  • wordpress企业站制作在线留电话的广告
  • php网站开发专业是做什么的硬件开发和软件开发