identity.go 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422
  1. package controller
  2. import (
  3. "designs/app/common/request"
  4. "designs/app/common/response"
  5. "designs/global"
  6. "designs/model"
  7. "designs/service"
  8. "designs/utils"
  9. "fmt"
  10. "github.com/gin-gonic/gin"
  11. "strings"
  12. "time"
  13. )
  14. var permissionToInterface = map[string][]string{
  15. "1": {"/property/imageList"},
  16. "2": {"/property/imageSet", "/property/imageDelete", "/property/upload", "/property/updateImageTags"},
  17. "3": {"/property/videoSet", "/property/videoDelete", "/property/updateVideoTags"},
  18. "4": {"/property/videoList"},
  19. }
  20. var permissions = map[int]string{
  21. 1: "图片查看",
  22. 2: "图片编辑",
  23. 3: "视频编辑",
  24. 4: "视频查看",
  25. 999: "超级权限",
  26. }
  27. func CreateAdminUser(c *gin.Context) {
  28. form := request.Check(c, &struct {
  29. Account string `json:"account" binding:"required"`
  30. Name string `json:"name" binding:"required"`
  31. Identity int `json:"identity" binding:"required"`
  32. }{})
  33. if form.Account == "admin" {
  34. response.Fail(c, 1001, "admin名称不可用")
  35. return
  36. }
  37. newPass := utils.RandomStringFast(10)
  38. now := model.XTime{
  39. Time: time.Now(),
  40. }
  41. newAdmin := model.AdminUser{
  42. Account: form.Account,
  43. Name: form.Name,
  44. IdentityId: form.Identity,
  45. Password: newPass,
  46. CreatedAt: now,
  47. UpdatedAt: now,
  48. }
  49. err := global.App.DB.Table(model.TableAdminUser).Create(&newAdmin).Error
  50. if err != nil {
  51. response.Fail(c, 500, err.Error())
  52. return
  53. }
  54. //记录日志
  55. userId := c.GetInt("userId")
  56. err = service.SetActionLog("新增", userId, "管理员", newAdmin)
  57. if err != nil {
  58. response.Fail(c, 500, err.Error())
  59. return
  60. }
  61. response.Success(c, gin.H{
  62. "data": map[string]interface{}{
  63. "password": newPass,
  64. "account": newAdmin.Account,
  65. },
  66. })
  67. }
  68. func AdminUserList(c *gin.Context) {
  69. form := request.Check(c, &struct {
  70. Limit int `form:"limit" json:"limit" binding:"required"`
  71. Offset int `form:"offset" json:"offset" binding:""`
  72. Search string `form:"search" json:"search" binding:""`
  73. Identity []int `form:"identity" json:"identity" binding:""`
  74. //Prop string `form:"prop" json:"prop" binding:""`
  75. //Order string `form:"order" json:"order" binding:""`
  76. }{})
  77. var res []struct {
  78. model.AdminUser
  79. IdentityName string `json:"identityName" gorm:"column:identityName;"`
  80. }
  81. var count int64
  82. query := global.App.DB.Table(model.TableAdminUser).LeftJoin(model.TableAdminIdentity, fmt.Sprintf("%s.id = %s.identityId", model.TableAdminIdentity, model.TableAdminUser))
  83. if form.Search != "" {
  84. query = query.Where(model.TableAdminUser+".name", "like", "%"+form.Search+"%")
  85. }
  86. if len(form.Identity) != 0 {
  87. query = query.WhereIn(model.TableAdminUser+".identityId", form.Identity)
  88. }
  89. err := query.Count(&count).Error
  90. if err != nil {
  91. response.Fail(c, 1001, err.Error())
  92. return
  93. }
  94. err = query.
  95. Order("id desc").
  96. Offset(form.Offset).
  97. Select("admin_user.*", "identityName").
  98. Limit(form.Limit).Scan(&res).Error
  99. if err != nil {
  100. response.Fail(c, 1001, err.Error())
  101. return
  102. }
  103. response.Success(c, gin.H{
  104. "data": map[string]interface{}{
  105. "list": res,
  106. "count": count,
  107. },
  108. })
  109. }
  110. func AdminList(c *gin.Context) {
  111. var res []struct {
  112. ID int `json:"id" gorm:"not null;"`
  113. Name string `json:"name" gorm:"not null;"`
  114. }
  115. query := global.App.DB.Table(model.TableAdminUser)
  116. err := query.
  117. Order("id desc").
  118. Select("id", "name").
  119. Scan(&res).Error
  120. if err != nil {
  121. response.Fail(c, 1001, err.Error())
  122. return
  123. }
  124. response.Success(c, gin.H{
  125. "data": res,
  126. })
  127. }
  128. func DeleteAdminUser(c *gin.Context) {
  129. form := request.Check(c, &struct {
  130. UserId int `form:"userId" json:"userId" binding:"required"`
  131. }{})
  132. var d interface{}
  133. err := global.App.DB.Table(model.TableAdminUser).Where("id", form.UserId).Delete(d).Error
  134. if err != nil {
  135. response.Fail(c, 1001, err.Error())
  136. return
  137. }
  138. //记录操作
  139. //记录日志
  140. userId := c.GetInt("userId")
  141. err = service.SetActionLog("删除", userId, "管理员", map[string]interface{}{
  142. "userId": userId,
  143. })
  144. if err != nil {
  145. response.Fail(c, 500, err.Error())
  146. return
  147. }
  148. response.Success(c, gin.H{})
  149. }
  150. func UpdateUserPassword(c *gin.Context) {
  151. form := request.Check(c, &struct {
  152. UserId int `form:"userId" json:"userId" binding:"required"`
  153. NewPass string `form:"newPass" json:"newPass" binding:"required|max=20,min=6"`
  154. }{})
  155. var res model.AdminUser
  156. global.App.DB.Table(model.TableAdminUser).Where("id", form.UserId).Select("id").First(&res)
  157. if res.ID == 0 {
  158. response.Fail(c, 1001, "用户不存在")
  159. return
  160. }
  161. now := time.Now()
  162. err := global.App.DB.Table(model.TableAdminUser).Where("id", form.UserId).Updates(map[string]interface{}{
  163. "password": form.NewPass,
  164. "updatedAt": now,
  165. }).Error
  166. if err != nil {
  167. response.Fail(c, 1002, err.Error())
  168. return
  169. }
  170. //记录日志
  171. userId := c.GetInt("userId")
  172. err = service.SetActionLog("修改", userId, "管理员", map[string]interface{}{
  173. "userId": userId,
  174. })
  175. if err != nil {
  176. response.Fail(c, 500, err.Error())
  177. return
  178. }
  179. response.Success(c, gin.H{})
  180. }
  181. func SetAdminUserPermission(c *gin.Context) {
  182. form := request.Check(c, &struct {
  183. UserId int `form:"userId" json:"userId" binding:"required"`
  184. Identity int `json:"identity" binding:"required"`
  185. }{})
  186. var res model.AdminUser
  187. global.App.DB.Table(model.TableAdminUser).Where("id", form.UserId).Select("id").First(&res)
  188. if res.ID == 0 {
  189. response.Fail(c, 1001, "用户不存在")
  190. return
  191. }
  192. now := time.Now()
  193. err := global.App.DB.Table(model.TableAdminUser).Where("id", form.UserId).Updates(map[string]interface{}{
  194. "identity": form.Identity,
  195. "updatedAt": now,
  196. }).Error
  197. if err != nil {
  198. response.Fail(c, 1002, err.Error())
  199. return
  200. }
  201. //记录日志
  202. userId := c.GetInt("userId")
  203. err = service.SetActionLog("修改", userId, "管理员", map[string]interface{}{
  204. "userId": userId,
  205. })
  206. if err != nil {
  207. response.Fail(c, 500, err.Error())
  208. return
  209. }
  210. response.Success(c, gin.H{})
  211. }
  212. func SetIdentity(c *gin.Context) {
  213. form := request.Check(c, &struct {
  214. IdentityName string `form:"identityName" json:"identityName" binding:"required"`
  215. Permissions []int `form:"permissions" json:"permissions" binding:""`
  216. }{})
  217. var data model.AdminIdentity
  218. global.App.DB.Table(model.TableAdminIdentity).Where("identityName", form.IdentityName).Select("id").First(&data)
  219. if data.ID != 0 {
  220. response.Fail(c, 1001, "identityName 重复")
  221. return
  222. }
  223. now := model.XTime{
  224. Time: time.Now(),
  225. }
  226. data = model.AdminIdentity{
  227. IdentityName: form.IdentityName,
  228. Permissions: utils.ArrayToString(form.Permissions),
  229. CreatedAt: now,
  230. UpdatedAt: now,
  231. }
  232. err := global.App.DB.Table(model.TableAdminIdentity).Create(&data).Error
  233. if err != nil {
  234. response.Fail(c, 1001, "AdminIdentity 写入数据失败"+err.Error())
  235. return
  236. }
  237. //记录日志
  238. userId := c.GetInt("userId")
  239. err = service.SetActionLog("新增", userId, "身份", data)
  240. if err != nil {
  241. response.Fail(c, 500, err.Error())
  242. return
  243. }
  244. response.Success(c, gin.H{})
  245. }
  246. func DeleteIdentity(c *gin.Context) {
  247. form := request.Check(c, &struct {
  248. IdentityId int `form:"identityId" json:"identityId" binding:"required"`
  249. }{})
  250. //如果这个身份已经有用户关联,无法删除
  251. var res model.AdminUser
  252. global.App.DB.Table(model.TableAdminUser).Where("identityId", form.IdentityId).Select("id").First(&res)
  253. if res.ID != 0 {
  254. response.Fail(c, 1001, "该身份已经有用户使用,无法删除")
  255. return
  256. }
  257. var d interface{}
  258. err := global.App.DB.Table(model.TableAdminIdentity).Where("id", form.IdentityId).Delete(d).Error
  259. if err != nil {
  260. response.Fail(c, 1001, "AdminIdentity 写入数据失败")
  261. return
  262. }
  263. //记录日志
  264. userId := c.GetInt("userId")
  265. err = service.SetActionLog("删除", userId, "身份", map[string]interface{}{
  266. "identityId": form.IdentityId,
  267. })
  268. if err != nil {
  269. response.Fail(c, 500, err.Error())
  270. return
  271. }
  272. response.Success(c, gin.H{})
  273. }
  274. func GetIdentityList(c *gin.Context) {
  275. form := request.Check(c, &struct {
  276. Limit int `form:"limit" json:"limit" binding:"required"`
  277. Offset int `form:"offset" json:"offset" binding:""`
  278. Search string `form:"search" json:"search" binding:""`
  279. }{})
  280. var count int64
  281. query := global.App.DB.Table(model.TableAdminIdentity)
  282. if form.Search != "" {
  283. query = query.Where("identityName", "like", "%"+form.Search+"%")
  284. }
  285. err := query.Count(&count).Error
  286. if err != nil {
  287. response.Fail(c, 1001, err.Error())
  288. return
  289. }
  290. var adminIdentity []struct {
  291. model.AdminIdentity
  292. PermissionList *[]string `json:"permissions"`
  293. }
  294. err = query.Order("id desc").Offset(form.Offset).Limit(form.Limit).Scan(&adminIdentity).Error
  295. if err != nil {
  296. response.Fail(c, 1001, err.Error())
  297. return
  298. }
  299. //var res
  300. for k, v := range adminIdentity {
  301. per := strings.Split(v.Permissions, ",")
  302. adminIdentity[k].PermissionList = &per
  303. }
  304. response.Success(c, gin.H{
  305. "data": map[string]interface{}{
  306. "list": adminIdentity,
  307. "count": count,
  308. },
  309. })
  310. }
  311. func GetIdentity(c *gin.Context) {
  312. query := global.App.DB.Table(model.TableAdminIdentity)
  313. var adminIdentity []struct {
  314. ID int `json:"id" gorm:"not null;"`
  315. IdentityName string `json:"identityName" gorm:"column:identityName;"`
  316. }
  317. err := query.Order("id desc").Select("id", "identityName").Scan(&adminIdentity).Error
  318. if err != nil {
  319. response.Fail(c, 1001, err.Error())
  320. return
  321. }
  322. response.Success(c, gin.H{
  323. "data": adminIdentity,
  324. })
  325. }
  326. func PermissionList(c *gin.Context) {
  327. response.Success(c, gin.H{
  328. "data": permissions,
  329. })
  330. }
  331. func UpdateIdentityPermission(c *gin.Context) {
  332. form := request.Check(c, &struct {
  333. IdentityId int `form:"identityId" json:"identityId" binding:"required"`
  334. Permissions []int `form:"permissions" json:"permissions" binding:""`
  335. }{})
  336. var data model.AdminIdentity
  337. global.App.DB.Table(model.TableAdminIdentity).Where("id", form.IdentityId).Select("id").First(&data)
  338. if data.ID == 0 {
  339. response.Fail(c, 1001, "identity不存在")
  340. return
  341. }
  342. err := global.App.DB.Table(model.TableAdminIdentity).Where("id", form.IdentityId).Updates(map[string]interface{}{
  343. "permissions": utils.ArrayToString(form.Permissions),
  344. "updatedAt": time.Now(),
  345. }).Error
  346. if err != nil {
  347. response.Fail(c, 1002, err.Error())
  348. return
  349. }
  350. //记录日志
  351. userId := c.GetInt("userId")
  352. err = service.SetActionLog("删除", userId, "权限", map[string]interface{}{
  353. "permissions": utils.ArrayToString(form.Permissions),
  354. "identityId": form.IdentityId,
  355. })
  356. if err != nil {
  357. response.Fail(c, 500, err.Error())
  358. return
  359. }
  360. response.Success(c, gin.H{})
  361. }