package front import ( "app.yhyue.com/moapp/jybase/common" "app.yhyue.com/moapp/jybase/encrypt" "app.yhyue.com/moapp/jybase/go-xweb/xweb" "app.yhyue.com/moapp/jybase/mongodb" "cmplatform/util" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" "strconv" "time" ) var UserMenu map[string][]map[string]interface{} //存储菜单 func init() { UserMenu = make(map[string][]map[string]interface{}) } type Front struct { *xweb.Action login xweb.Mapper `xweb:"/"` //登录页面 index xweb.Mapper `xweb:"/front/index"` //index页面 logout xweb.Mapper `xweb:"/front/logout"` //注销 updatePwd xweb.Mapper `xweb:"/front/updatepwd"` //更新密码 //user user xweb.Mapper `xweb:"/front/user"` //查所有用户 userDel xweb.Mapper `xweb:"/front/user/del"` //删除用户 userSave xweb.Mapper `xweb:"/front/user/save"` //保存用户 //menu menu xweb.Mapper `xweb:"/front/menu"` //查一级菜单 menuSave xweb.Mapper `xweb:"/front/menu/save"` //保存一级菜单 menuDel xweb.Mapper `xweb:"/front/menu/del"` //删除一级菜单 menuSecond xweb.Mapper `xweb:"/front/menuSecond"` //查二级菜单 menuSecondSave xweb.Mapper `xweb:"/front/menuSecond/save"` //保存二级菜单 menuSecondDel xweb.Mapper `xweb:"/front/menuSecond/del"` //删除二级菜单 personalMenu xweb.Mapper `xweb:"/front/personalMenu"` //role roleManager xweb.Mapper `xweb:"/front/role"` //角色权限管理 roleNew xweb.Mapper `xweb:"/front/role/save"` //新增角色 roleEdit xweb.Mapper `xweb:"/front/role/edit/(.*)"` //角色权限查看 roleFirst xweb.Mapper `xweb:"/front/role/first"` //一级权限的查看 roleSecond xweb.Mapper `xweb:"/front/role/second"` //二级权限的查看 roleSave xweb.Mapper `xweb:"/front/role/edit/save"` //权限编辑保存 roleDel xweb.Mapper `xweb:"/front/role/edit/del"` //权限编辑删除 roleSecondEdit xweb.Mapper `xweb:"/front/role/second/edit"` //二级权限编辑 } func (f *Front) Login() { defer common.Catch() if f.Method() == "POST" { email := f.GetString("email") password := f.GetString("pwd") passwordEn := encrypt.SE.EncodeString(password) query := bson.M{ "s_email": email, "s_pwd": passwordEn, } user, _ := util.Mgo.FindOne("user", query) checked := false s_id := "" if user != nil && len(*user) > 0 { checked = true f.SetSession("user", map[string]interface{}{ "name": (*user)["s_name"], "role": (*user)["s_role"], "pwd": password, "email": email, "id": mongodb.BsonIdToSId((*user)["_id"]), }) UserMenu[email] = GetUserMenu(common.ObjToString((*user)["s_role"])) if common.ObjToString((*user)["s_role"]) == "3" { users, ok := util.Mgo.FindOne("cuser", map[string]interface{}{"s_name": (*user)["s_name"], "b_delete": false}) if users != nil && ok { s_id = mongodb.BsonIdToSId((*users)["_id"]) } } } f.ServeJson(map[string]interface{}{ "checked": checked, "role": (*user)["s_role"], "id": s_id, }) } else { f.Render("login.html") } } func (f *Front) Index() { defer common.Catch() f.Render("index.html") } func (f *Front) Logout() { f.DelSession("user") f.Redirect("/") } func (f *Front) UpdatePwd() { defer common.Catch() id := f.GetString("id") password := f.GetString("pwd") set := bson.M{ "$set": bson.M{ "s_pwd": encrypt.SE.EncodeString(password), }, } if util.Mgo.UpdateById("user", id, set) { sessionuser := f.GetSession("user").(map[string]interface{}) sessionuser["pwd"] = password f.SetSession("user", sessionuser) } } func (f *Front) User() { defer common.Catch() role, _ := util.Mgo.Find("role", nil, nil, nil, false, -1, -1) roleMap := make(map[string]string) for _, v := range *role { level := common.ObjToString(v["level"]) if level != "" { roleMap[level] = common.ObjToString(v["name"]) } } if f.Method() == "POST" { query := bson.M{ "s_role": bson.M{ "$ne": "0", }, } data, _ := util.Mgo.Find("user", query, `{"_id":1}`, nil, false, -1, -1) for _, d := range *data { d["s_pwd"] = encrypt.SE.DecodeString(common.ObjToString(d["s_pwd"])) d["role_name"] = roleMap[common.ObjToString(d["s_role"])] } f.ServeJson(map[string]interface{}{ "data": data, }) } else { f.T["role"] = roleMap f.Render("com/user.html", &f.T) } } func (f *Front) UserDel() { defer common.Catch() _id := f.GetString("_id") query := bson.M{ "_id": mongodb.StringTOBsonId(_id), } b := util.Mgo.Del("user", query) f.ServeJson(map[string]interface{}{ "rep": b, }) } func (f *Front) UserSave() { _id := f.GetString("_id") role := f.GetString("role") name := f.GetString("name") email := f.GetString("email") pwd := f.GetString("pwd") set := bson.M{ "$set": bson.M{ "s_role": role, "s_name": name, "s_email": email, "s_pwd": encrypt.SE.EncodeString(pwd), "i_comeintime": time.Now().Unix(), }, } query := bson.M{ "_id": mongodb.StringTOBsonId(_id), } if _id == "" { query = bson.M{ "_id": primitive.NewObjectID(), } } b := util.Mgo.Update("user", query, set, true, false) //b := util.Mgo.UpdateById("user", _id, set) f.ServeJson(map[string]interface{}{ "rep": b, }) } func (f *Front) PersonalMenu() { user := f.GetSession("user").(map[string]interface{}) list := UserMenu[common.ObjToString(user["email"])] f.ServeJson(map[string]interface{}{ "data": list, }) } func GetUserMenu(role string) []map[string]interface{} { var list []map[string]interface{} maps := map[string]interface{}{ "delete": false, } if role != "0" { maps["role."+role] = true } data, _ := util.Mgo.Find("menu_first", maps, nil, nil, false, -1, -1) for _, d := range *data { _id := d["_id"] maps = map[string]interface{}{ "delete": false, "s_pid": mongodb.BsonIdToSId(_id), } if role != "0" { maps["role."+role] = true } secdatas, _ := util.Mgo.Find("menu_second", maps, nil, nil, false, -1, -1) secmenumap := map[string]interface{}{} for index, secdata := range *secdatas { secmenumap[strconv.Itoa(index+1)] = secdata } if len(secmenumap) != 0 { d["secondmenu"] = secmenumap } list = append(list, d) } return list }