package controllers
import (
"database/sql"
"godoc/helpers"
"godoc/i18n"
"godoc/params"
"godoc/rbac"
"godoc/service"
"html/template"
"strconv"
"strings"
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
"github.com/iiinsomnia/yiigo"
)
type UserController struct {
*controller
}
type UserForm struct {
Name string `form:"name" binding:"required"`
Email string `form:"email" binding:"required"`
Role int `form:"role" binding:"required"`
}
type PasswordForm struct {
Password string `form:"password" binding:"required"`
PasswordRepeat string `form:"password_repeat" binding:"required"`
}
func NewUserController(r *gin.Engine) *UserController {
return &UserController{
construct(r, "main", "user"),
}
}
func (u *UserController) Index(c *gin.Context) {
identity := rbac.GetIdentity(c)
if identity.Role != 3 {
u.V(c).RenderErr(403, "无操作权限")
return
}
query := c.Request.URL.Query()
userService := service.NewUser(c)
count, curPage, totalPage, data, err := userService.GetUserList(query)
if err != nil && err != sql.ErrNoRows {
u.V(c).RenderErr(500, "数据获取失败")
return
}
u.V(c).F(template.FuncMap{
"int": helpers.Int,
"httpBuildQueryUrl": helpers.HttpBuildQueryUrl,
}).T("layouts/pagination").Render("index", gin.H{
"count": count,
"totalPage": totalPage,
"query": query,
"roles": rbac.Roles,
"users": data,
"pagination": gin.H{
"uri": "/users",
"curPage": curPage,
"prevPage": curPage - 1,
"nextPage": curPage + 1,
"lastPage": totalPage,
"pages": helpers.Pagination(curPage, totalPage),
},
})
}
func (u *UserController) Add(c *gin.Context) {
identity := rbac.GetIdentity(c)
if identity.Role != 3 {
u.V(c).RenderErr(403, "无操作权限")
return
}
if c.Request.Method == "GET" {
u.V(c).F(template.FuncMap{
"roleDesc": params.RoleDesc,
}).Render("add", gin.H{
"defaultPass": yiigo.EnvString("app", "defaultPass", "123"),
"roles": rbac.Roles,
})
return
}
form := &UserForm{}
if validate := c.ShouldBindWith(form, binding.Form); validate != nil {
errors := strings.Split(validate.Error(), "\n")
u.JSON(c, false, i18n.I18NSlice(errors))
return
}
userService := service.NewUser(c)
unique, err := userService.CheckUnique(form.Name, form.Email)
if err != nil {
u.JSON(c, false, "添加失败")
return
}
if !unique {
u.JSON(c, false, "用户名或邮箱已被注册")
return
}
defaultPass := yiigo.EnvString("app", "defaultPass", "123")
salt := rbac.GenerateSalt()
data := yiigo.X{
"name": form.Name,
"email": form.Email,
"role": form.Role,
"password": yiigo.MD5(defaultPass + salt),
"salt": salt,
}
_, err = userService.Add(data)
if err != nil {
u.JSON(c, false, "添加失败")
return
}
u.JSON(c, true, "添加成功", nil, "/users")
}
func (u *UserController) Edit(c *gin.Context) {
identity := rbac.GetIdentity(c)
if identity.Role != 3 {
u.V(c).RenderErr(403, "无操作权限")
return
}
id := c.Param("id")
_id, _ := strconv.Atoi(id)
userService := service.NewUser(c)
if c.Request.Method == "GET" {
user, err := userService.GetDetail(_id)
if err != nil {
if err == sql.ErrNoRows {
u.V(c).RenderErr(404, "用户不存在")
return
}
u.V(c).RenderErr(500, "数据获取失败")
return
}
u.V(c).F(template.FuncMap{
"roleDesc": params.RoleDesc,
}).Render("edit", gin.H{
"user": user,
"roles": rbac.Roles,
})
return
}
form := &UserForm{}
if validate := c.ShouldBindWith(form, binding.Form); validate != nil {
errors := strings.Split(validate.Error(), "\n")
u.JSON(c, false, i18n.I18NSlice(errors))
return
}
unique, err := userService.CheckUnique(form.Name, form.Email, _id)
if err != nil {
u.JSON(c, false, "添加失败")
return
}
if !unique {
u.JSON(c, false, "用户名或邮箱已被使用")
return
}
data := yiigo.X{
"name": form.Name,
"email": form.Email,
"role": form.Role,
}
err = userService.Edit(_id, data)
if err != nil {
u.JSON(c, false, "编辑失败")
return
}
u.JSON(c, true, "编辑成功", nil, "/users")
}
func (u *UserController) Password(c *gin.Context) {
form := &PasswordForm{}
if validate := c.ShouldBindWith(form, binding.Form); validate != nil {
errors := strings.Split(validate.Error(), "\n")
u.JSON(c, false, i18n.I18NSlice(errors))
return
}
if form.Password != form.PasswordRepeat {
u.JSON(c, false, "密码确认错误")
return
}
salt := rbac.GenerateSalt()
data := yiigo.X{
"password": yiigo.MD5(form.Password + salt),
"salt": salt,
}
identity := rbac.GetIdentity(c)
userService := service.NewUser(c)
err := userService.Edit(identity.ID, data)
if err != nil {
u.JSON(c, false, "修改失败")
return
}
u.JSON(c, true, "修改成功", nil, "/users")
}
func (u *UserController) Reset(c *gin.Context) {
identity := rbac.GetIdentity(c)
if identity.Role != 3 {
u.V(c).RenderErr(403, "无操作权限")
return
}
id := c.Param("id")
_id, _ := strconv.Atoi(id)
defaultPass := yiigo.EnvString("app", "defaultPass", "123")
salt := rbac.GenerateSalt()
data := yiigo.X{
"password": yiigo.MD5(defaultPass + salt),
"salt": salt,
}
userService := service.NewUser(c)
err := userService.Edit(_id, data)
if err != nil {
u.JSON(c, false, "重置失败")
return
}
u.JSON(c, true, "重置成功", nil, "/users")
}
func (u *UserController) Delete(c *gin.Context) {
identity := rbac.GetIdentity(c)
if identity.Role != 3 {
u.V(c).RenderErr(403, "无操作权限")
return
}
id := c.Param("id")
_id, _ := strconv.Atoi(id)
userService := service.NewUser(c)
err := userService.Delete(_id)
if err != nil {
u.JSON(c, false, "删除失败")
return
}
u.JSON(c, true, "删除成功", nil, "/users")
}
没有合适的资源?快使用搜索试试~ 我知道了~
go开发的文档管理系统.zip
共458个文件
js:197个
html:115个
css:75个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 177 浏览量
2023-12-24
15:34:34
上传
评论
收藏 1.93MB ZIP 举报
温馨提示
go语言开发项目go语言开发项目go语言开发项目go语言开发项目go语言开发项目 go语言开发项目go语言开发项目go语言开发项目go语言开发项目go语言开发项目 go语言开发项目go语言开发项目go语言开发项目go语言开发项目go语言开发项目 go语言开发项目go语言开发项目go语言开发项目go语言开发项目go语言开发项目 go语言开发项目go语言开发项目go语言开发项目go语言开发项目go语言开发项目 go语言开发项目go语言开发项目go语言开发项目go语言开发项目go语言开发项目 go语言开发项目go语言开发项目go语言开发项目go语言开发项目go语言开发项目 go语言开发项目go语言开发项目go语言开发项目go语言开发项目go语言开发项目 go语言开发项目go语言开发项目go语言开发项目go语言开发项目go语言开发项目 go语言开发项目go语言开发项目go语言开发项目go语言开发项目go语言开发项目 go语言开发项目go语言开发项目go语言开发项目go语言开发项目go语言开发项目
资源推荐
资源详情
资源评论
收起资源包目录
go开发的文档管理系统.zip (458个子文件)
AUTHORS 6KB
bootstrap.min.css 118KB
font-awesome.css 37KB
editormd.min.css 36KB
font-awesome.min.css 30KB
ambiance.css 26KB
editormd.preview.min.css 20KB
dropzone.css 10KB
loading-bar.css 9KB
codemirror.css 8KB
sbadmin2.min.css 7KB
toastr.min.css 6KB
codemirror.min.css 5KB
bounce.css 5KB
mdn-like.css 5KB
solarized.css 5KB
merge.css 3KB
barber-shop.css 3KB
lint.css 3KB
macosx.css 3KB
xq-dark.css 3KB
center-atom.css 3KB
site.css 2KB
lesser-dark.css 2KB
pastel-on-dark.css 2KB
xq-light.css 2KB
tomorrow-night-eighties.css 2KB
flash.css 2KB
center-circle.css 2KB
erlang-dark.css 2KB
zenburn.css 2KB
twilight.css 2KB
midnight.css 2KB
corner-indicator.css 2KB
vibrant-ink.css 2KB
mbo.css 2KB
base16-dark.css 2KB
base16-light.css 2KB
tern.css 2KB
3024-night.css 2KB
paraiso-dark.css 2KB
paraiso-light.css 2KB
tomorrow-night-bright.css 2KB
3024-day.css 2KB
blackboard.css 2KB
colorforth.css 2KB
editormd.logo.min.css 2KB
the-matrix.css 2KB
night.css 2KB
rubyblue.css 2KB
monokai.css 1KB
cobalt.css 1KB
simplescrollbars.css 1KB
center-radar.css 1KB
eclipse.css 1KB
metisMenu.css 1KB
neo.css 932B
center-simple.css 926B
flat-top.css 793B
metisMenu.min.css 781B
jquery.tagsinput.min.css 770B
big-counter.css 769B
elegant.css 768B
neat.css 693B
show-hint.css 662B
error.css 599B
dialog.css 502B
tiki.css 440B
foldgutter.css 435B
fill-left.css 348B
minimal.css 317B
tiddlywiki.css 220B
matchesonscrollbar.css 188B
login.css 149B
fullscreen.css 116B
ambiance-mobile.css 103B
log.xml.dev 949B
env.ini.dev 265B
fontawesome-webfont.eot 162KB
glyphicons-halflings-regular.eot 20KB
editormd-logo.eot 1KB
[email protected] 21KB
[email protected] 16KB
loading.gif 8KB
.gitignore 324B
user.go 6KB
doc.go 4KB
project.go 4KB
user.go 4KB
doc.go 3KB
category.go 3KB
category.go 3KB
project.go 3KB
view.go 2KB
home.go 2KB
i18n.go 2KB
session.go 2KB
identity.go 2KB
controller.go 1KB
main.go 1KB
共 458 条
- 1
- 2
- 3
- 4
- 5
资源评论
天天501
- 粉丝: 598
- 资源: 4666
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功