front.go 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. package front
  2. import (
  3. qu "qfw/util"
  4. "strconv"
  5. "time"
  6. . "util"
  7. "github.com/go-xweb/xweb"
  8. "gopkg.in/mgo.v2/bson"
  9. )
  10. var UserMenu map[string][]map[string]interface{} //存储菜单
  11. func init() {
  12. UserMenu = make(map[string][]map[string]interface{})
  13. }
  14. type Front struct {
  15. *xweb.Action
  16. login xweb.Mapper `xweb:"/"` //登录页面
  17. index xweb.Mapper `xweb:"/front/index"` //index页面
  18. logout xweb.Mapper `xweb:"/front/logout"` //注销
  19. updatePwd xweb.Mapper `xweb:"/front/updatepwd"` //更新密码
  20. //user
  21. user xweb.Mapper `xweb:"/front/user"` //查所有用户
  22. userDel xweb.Mapper `xweb:"/front/user/del"` //删除用户
  23. userSave xweb.Mapper `xweb:"/front/user/save"` //保存用户
  24. //menu
  25. menu xweb.Mapper `xweb:"/front/menu"` //查一级菜单
  26. menuSave xweb.Mapper `xweb:"/front/menu/save"` //保存一级菜单
  27. menuDel xweb.Mapper `xweb:"/front/menu/del"` //删除一级菜单
  28. menuSecond xweb.Mapper `xweb:"/front/menuSecond"` //查二级菜单
  29. menuSecondSave xweb.Mapper `xweb:"/front/menuSecond/save"` //保存二级菜单
  30. menuSecondDel xweb.Mapper `xweb:"/front/menuSecond/del"` //删除二级菜单
  31. personalMenu xweb.Mapper `xweb:"/front/personalMenu"`
  32. //role
  33. roleManager xweb.Mapper `xweb:"/front/role"` //角色权限管理
  34. roleEdit xweb.Mapper `xweb:"/front/role/edit/(.*)"` //角色权限查看
  35. roleFirst xweb.Mapper `xweb:"/front/role/first"` //一级权限的查看
  36. roleSecond xweb.Mapper `xweb:"/front/role/second"` //二级权限的查看
  37. roleSave xweb.Mapper `xweb:"/front/role/edit/save"` //权限编辑保存
  38. roleDel xweb.Mapper `xweb:"/front/role/edit/del"` //权限编辑删除
  39. roleSecondEdit xweb.Mapper `xweb:"/front/role/second/edit"` //二级权限编辑
  40. logicManager xweb.Mapper `xweb:"/front/logic"` //逻辑管理
  41. logicPre xweb.Mapper `xweb:"/front/logic/pre"` //预处理逻辑
  42. logicMatch xweb.Mapper `xweb:"/front/logic/match"` //匹配逻辑
  43. logicClean xweb.Mapper `xweb:"/front/logic/clean"` //清洗
  44. logicPreSav xweb.Mapper `xweb:"/front/logic/pre/save"` //预处理逻辑保存
  45. }
  46. func (f *Front) Login() {
  47. defer qu.Catch()
  48. if f.Method() == "POST" {
  49. email := f.GetString("email")
  50. password := f.GetString("pwd")
  51. //f.SetSession("password", password)
  52. passwordEn := qu.SE.EncodeString(password)
  53. query := bson.M{
  54. "s_email": email,
  55. "s_pwd": passwordEn,
  56. }
  57. user, _ := Mgo.FindOne("user", query)
  58. checked := false
  59. if user != nil && len(*user) > 0 {
  60. checked = true
  61. f.SetSession("user", map[string]interface{}{
  62. "name": (*user)["s_name"],
  63. "role": (*user)["s_role"],
  64. "pwd": password,
  65. "email": email,
  66. "id": qu.BsonIdToSId((*user)["_id"]),
  67. })
  68. UserMenu[email] = GetUserMenu(qu.ObjToString((*user)["s_role"]))
  69. }
  70. f.ServeJson(map[string]interface{}{
  71. "checked": checked,
  72. })
  73. } else {
  74. f.Render("login.html")
  75. }
  76. }
  77. func (f *Front) Index() {
  78. defer qu.Catch()
  79. f.Render("index.html")
  80. }
  81. func (f *Front) Logout() {
  82. f.DelSession("user")
  83. f.Redirect("/")
  84. }
  85. func (f *Front) UpdatePwd() {
  86. defer qu.Catch()
  87. id := f.GetString("id")
  88. password := f.GetString("pwd")
  89. set := bson.M{
  90. "$set": bson.M{
  91. "s_pwd": qu.SE.EncodeString(password),
  92. },
  93. }
  94. if Mgo.UpdateById("user", id, set) {
  95. sessionuser := f.GetSession("user").(map[string]interface{})
  96. sessionuser["pwd"] = password
  97. f.SetSession("user", sessionuser)
  98. }
  99. }
  100. func (f *Front) User() {
  101. defer qu.Catch()
  102. if f.Method() == "POST" {
  103. query := bson.M{
  104. "s_role": bson.M{
  105. "$ne": "0",
  106. },
  107. }
  108. data, _ := Mgo.Find("user", query, `{"_id":1}`, nil, false, -1, -1)
  109. for _, d := range *data {
  110. d["s_pwd"] = qu.SE.DecodeString(qu.ObjToString(d["s_pwd"]))
  111. }
  112. f.ServeJson(map[string]interface{}{
  113. "data": data,
  114. })
  115. } else {
  116. f.Render("com/user.html")
  117. }
  118. }
  119. func (f *Front) UserDel() {
  120. defer qu.Catch()
  121. _id := f.GetString("_id")
  122. query := bson.M{
  123. "_id": qu.StringTOBsonId(_id),
  124. }
  125. b := Mgo.Del("user", query)
  126. f.ServeJson(map[string]interface{}{
  127. "rep": b,
  128. })
  129. }
  130. func (f *Front) UserSave() {
  131. _id := f.GetString("_id")
  132. role := f.GetString("role")
  133. name := f.GetString("name")
  134. email := f.GetString("email")
  135. pwd := f.GetString("pwd")
  136. set := bson.M{
  137. "$set": bson.M{
  138. "s_role": role,
  139. "s_name": name,
  140. "s_email": email,
  141. "s_pwd": qu.SE.EncodeString(pwd),
  142. "i_comeintime": time.Now().Unix(),
  143. },
  144. }
  145. query := bson.M{
  146. "_id": qu.StringTOBsonId(_id),
  147. }
  148. if _id == "" {
  149. query = bson.M{
  150. "_id": bson.NewObjectId(),
  151. }
  152. }
  153. b := Mgo.Update("user", query, set, true, false)
  154. //b := Mgo.UpdateById("user", _id, set)
  155. f.ServeJson(map[string]interface{}{
  156. "rep": b,
  157. })
  158. }
  159. func (f *Front) PersonalMenu() {
  160. user := f.GetSession("user").(map[string]interface{})
  161. list := UserMenu[qu.ObjToString(user["email"])]
  162. f.ServeJson(map[string]interface{}{
  163. "data": list,
  164. })
  165. }
  166. func GetUserMenu(role string) []map[string]interface{} {
  167. list := []map[string]interface{}{}
  168. maps := map[string]interface{}{
  169. "delete": false,
  170. }
  171. if role != "0" {
  172. maps["role."+role] = true
  173. }
  174. data, _ := Mgo.Find("menu_first", maps, nil, nil, false, -1, -1)
  175. for _, d := range *data {
  176. _id := d["_id"]
  177. maps = map[string]interface{}{
  178. "delete": false,
  179. "s_pid": qu.BsonIdToSId(_id),
  180. }
  181. if role != "0" {
  182. maps["role."+role] = true
  183. }
  184. secdatas, _ := Mgo.Find("menu_second", maps, nil, nil, false, -1, -1)
  185. secmenumap := map[string]interface{}{}
  186. for index, secdata := range *secdatas {
  187. secmenumap[strconv.Itoa(index+1)] = secdata
  188. }
  189. if len(secmenumap) != 0 {
  190. d["secondmenu"] = secmenumap
  191. }
  192. list = append(list, d)
  193. }
  194. return list
  195. }