front.go 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  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. }
  41. func (f *Front) Login() {
  42. defer qu.Catch()
  43. if f.Method() == "POST" {
  44. email := f.GetString("email")
  45. password := f.GetString("pwd")
  46. //f.SetSession("password", password)
  47. passwordEn := qu.SE.EncodeString(password)
  48. query := bson.M{
  49. "s_email": email,
  50. "s_pwd": passwordEn,
  51. }
  52. user, _ := Mgo.FindOne("user", query)
  53. checked := false
  54. if user != nil && len(*user) > 0 {
  55. checked = true
  56. f.SetSession("user", map[string]interface{}{
  57. "name": (*user)["s_name"],
  58. "role": (*user)["s_role"],
  59. "pwd": password,
  60. "email": email,
  61. "id": qu.BsonIdToSId((*user)["_id"]),
  62. })
  63. UserMenu[email] = GetUserMenu(qu.ObjToString((*user)["s_role"]))
  64. }
  65. f.ServeJson(map[string]interface{}{
  66. "checked": checked,
  67. })
  68. } else {
  69. f.Render("login.html")
  70. }
  71. }
  72. func (f *Front) Index() {
  73. defer qu.Catch()
  74. f.Render("index.html")
  75. }
  76. func (f *Front) Logout() {
  77. f.DelSession("user")
  78. f.Redirect("/")
  79. }
  80. func (f *Front) UpdatePwd() {
  81. defer qu.Catch()
  82. id := f.GetString("id")
  83. password := f.GetString("pwd")
  84. set := bson.M{
  85. "$set": bson.M{
  86. "s_pwd": qu.SE.EncodeString(password),
  87. },
  88. }
  89. if Mgo.UpdateById("user", id, set) {
  90. sessionuser := f.GetSession("user").(map[string]interface{})
  91. sessionuser["pwd"] = password
  92. f.SetSession("user", sessionuser)
  93. }
  94. }
  95. func (f *Front) User() {
  96. defer qu.Catch()
  97. if f.Method() == "POST" {
  98. query := bson.M{
  99. "s_role": bson.M{
  100. "$ne": "0",
  101. },
  102. }
  103. data, _ := Mgo.Find("user", query, `{"_id":1}`, nil, false, -1, -1)
  104. for _, d := range *data {
  105. d["s_pwd"] = qu.SE.DecodeString(qu.ObjToString(d["s_pwd"]))
  106. }
  107. f.ServeJson(map[string]interface{}{
  108. "data": data,
  109. })
  110. } else {
  111. f.Render("com/user.html")
  112. }
  113. }
  114. func (f *Front) UserDel() {
  115. defer qu.Catch()
  116. _id := f.GetString("_id")
  117. query := bson.M{
  118. "_id": qu.StringTOBsonId(_id),
  119. }
  120. b := Mgo.Del("user", query)
  121. f.ServeJson(map[string]interface{}{
  122. "rep": b,
  123. })
  124. }
  125. func (f *Front) UserSave() {
  126. _id := f.GetString("_id")
  127. role := f.GetString("role")
  128. name := f.GetString("name")
  129. email := f.GetString("email")
  130. pwd := f.GetString("pwd")
  131. set := bson.M{
  132. "$set": bson.M{
  133. "s_role": role,
  134. "s_name": name,
  135. "s_email": email,
  136. "s_pwd": qu.SE.EncodeString(pwd),
  137. "i_comeintime": time.Now().Unix(),
  138. },
  139. }
  140. query := bson.M{
  141. "_id": qu.StringTOBsonId(_id),
  142. }
  143. if _id == "" {
  144. query = bson.M{
  145. "_id": bson.NewObjectId(),
  146. }
  147. }
  148. b := Mgo.Update("user", query, set, true, false)
  149. //b := Mgo.UpdateById("user", _id, set)
  150. f.ServeJson(map[string]interface{}{
  151. "rep": b,
  152. })
  153. }
  154. func (f *Front) PersonalMenu() {
  155. user := f.GetSession("user").(map[string]interface{})
  156. list := UserMenu[qu.ObjToString(user["email"])]
  157. f.ServeJson(map[string]interface{}{
  158. "data": list,
  159. })
  160. }
  161. func GetUserMenu(role string) []map[string]interface{} {
  162. list := []map[string]interface{}{}
  163. maps := map[string]interface{}{
  164. "delete": false,
  165. }
  166. if role != "0" {
  167. maps["role."+role] = true
  168. }
  169. data, _ := Mgo.Find("menu_first", maps, nil, nil, false, -1, -1)
  170. for _, d := range *data {
  171. _id := d["_id"]
  172. maps = map[string]interface{}{
  173. "delete": false,
  174. "s_pid": qu.BsonIdToSId(_id),
  175. }
  176. if role != "0" {
  177. maps["role."+role] = true
  178. }
  179. secdatas, _ := Mgo.Find("menu_second", maps, nil, nil, false, -1, -1)
  180. secmenumap := map[string]interface{}{}
  181. for index, secdata := range *secdatas {
  182. secmenumap[strconv.Itoa(index+1)] = secdata
  183. }
  184. if len(secmenumap) != 0 {
  185. d["secondmenu"] = secmenumap
  186. }
  187. list = append(list, d)
  188. }
  189. return list
  190. }