This commit is contained in:
arraykeys
2019-08-08 17:13:34 +08:00
parent e8e5966a8c
commit f0bf2d5fec
2885 changed files with 1195993 additions and 12 deletions
+44
View File
@@ -0,0 +1,44 @@
package models
import (
"fmt"
"os"
"github.com/astaxie/beego"
"github.com/snail007/go-activerecord/mysql"
)
var G *mysql.DBGroup
func init() {
host := beego.AppConfig.String("db_host")
port, _ := beego.AppConfig.Int("db_port")
user := beego.AppConfig.String("db_user")
pass := beego.AppConfig.String("db_pass")
dbname := beego.AppConfig.String("db_name")
dbTablePrefix := beego.AppConfig.String("db_table_prefix")
maxIdle, _ := beego.AppConfig.Int("db_conn_max_idle")
maxConn, _ := beego.AppConfig.Int("db_conn_max_connection")
G = mysql.NewDBGroup("default")
cfg := mysql.NewDBConfigWith(host, port, dbname, user, pass)
cfg.SetMaxIdleConns = maxIdle
cfg.SetMaxOpenConns = maxConn
cfg.TablePrefix = dbTablePrefix
cfg.TablePrefixSqlIdentifier = "__PREFIX__"
//add database anytunnel_system
err := G.Regist("default", cfg)
if err != nil {
beego.Error(fmt.Errorf("regist db error:%s,with config : %v", err, cfg))
os.Exit(100)
}
//add database anytunnel_base
cfg.Database = beego.AppConfig.String("db.base.name")
cfg.TablePrefix = beego.AppConfig.String("db.base.table_prefix")
err = G.Regist("base", cfg)
if err != nil {
beego.Error(fmt.Errorf("regist db error:%s,with config : %v", err, cfg))
os.Exit(100)
}
}
+127
View File
@@ -0,0 +1,127 @@
package models
import "github.com/snail007/go-activerecord/mysql"
type Privilege struct {
}
func (p *Privilege) GetTypedPrivileges(userId string, isDisplay string) (navigators, menus, controllers []map[string]string, err error) {
db := G.DB()
var rs *mysql.ResultSet
if userId != "1" {
roldIds := []string{}
rs, err = db.Query(db.AR().Select("role_id").From("user_role").Where(map[string]interface{}{
"user_id": userId,
"is_delete": 0,
}))
if err != nil {
return
}
roldIds = rs.Values("role_id")
privilegeIds := []string{}
rs, err = db.Query(db.AR().Select("privilege_id").From("role_privilege").Where(map[string]interface{}{
"role_id": roldIds,
"is_delete": 0,
}))
if err != nil {
return
}
privilegeIds = rs.Values("privilege_id")
rs, err = db.Query(db.AR().From("privilege").Where(map[string]interface{}{
"privilege_id": privilegeIds,
}).OrderBy("parent_id", "ASC").
OrderBy("sequence", "ASC"))
if err != nil {
return
}
} else {
rs, err = db.Query(db.AR().From("privilege").OrderBy("parent_id", "ASC").OrderBy("sequence", "ASC"))
if err != nil {
return
}
}
navigators = []map[string]string{}
menus = []map[string]string{}
controllers = []map[string]string{}
allPrivileges := rs.MapRows("privilege_id")
for _, row := range rs.Rows() {
if isDisplay != "-1" {
if row["is_display"] != isDisplay {
continue
}
}
switch row["type"] {
case "navigator":
navigators = append(navigators, row)
case "menu":
row["parent"] = allPrivileges[row["parent_id"]]["name"]
menus = append(menus, row)
case "controller":
row["parent"] = allPrivileges[row["parent_id"]]["name"]
controllers = append(controllers, row)
}
}
return
}
func (p *Privilege) GetPrivilegeByPrivilegeId(privilegeId string) (privilege map[string]string, err error) {
db := G.DB()
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("privilege").Where(map[string]interface{}{
"privilege_id": privilegeId,
}))
if err != nil {
return
}
privilege = rs.Row()
return
}
func (p *Privilege) HasSub(privilegeId string) (has bool, err error) {
db := G.DB()
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("privilege").Where(map[string]interface{}{
"parent_id": privilegeId,
}).Limit(0, 1))
if err != nil {
return
}
if rs.Len() > 0 {
has = true
}
return
}
func (p *Privilege) Delete(privilegeId string) (err error) {
db := G.DB()
_, err = db.Exec(db.AR().Delete("privilege", map[string]interface{}{
"privilege_id": privilegeId,
}))
if err != nil {
return
}
return
}
func (p *Privilege) Insert(privilege map[string]interface{}) (id int64, err error) {
db := G.DB()
var rs *mysql.ResultSet
rs, err = db.Exec(db.AR().Insert("privilege", privilege))
if err != nil {
return
}
id = rs.LastInsertId
return
}
func (p *Privilege) Update(privilegeId string, privilege map[string]interface{}) (id int64, err error) {
db := G.DB()
var rs *mysql.ResultSet
rs, err = db.Exec(db.AR().Update("privilege", privilege, map[string]interface{}{
"privilege_id": privilegeId,
}))
if err != nil {
return
}
id = rs.LastInsertId
return
}
+98
View File
@@ -0,0 +1,98 @@
package models
import "github.com/snail007/go-activerecord/mysql"
type Role struct {
}
func (p *Role) GetRoleByRoleId(roleId string) (role map[string]string, err error) {
db := G.DB()
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("role").Where(map[string]interface{}{
"role_id": roleId,
"is_delete": 0,
}))
if err != nil {
return
}
role = rs.Row()
return
}
func (p *Role) HasUser(roleId string) (has bool, err error) {
db := G.DB()
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("user_role").Where(map[string]interface{}{
"role_id": roleId,
}).Limit(0, 1))
if err != nil {
return
}
if rs.Len() > 0 {
has = true
}
return
}
func (p *Role) Delete(roleId string) (err error) {
db := G.DB()
_, err = db.Exec(db.AR().Update("role", map[string]interface{}{
"is_delete": 1,
}, map[string]interface{}{
"role_id": roleId,
}))
if err != nil {
return
}
return
}
func (p *Role) Insert(role map[string]interface{}) (id int64, err error) {
db := G.DB()
var rs *mysql.ResultSet
rs, err = db.Exec(db.AR().Insert("role", role))
if err != nil {
return
}
id = rs.LastInsertId
return
}
func (p *Role) Update(roleId string, role map[string]interface{}) (id int64, err error) {
db := G.DB()
var rs *mysql.ResultSet
rs, err = db.Exec(db.AR().Update("role", role, map[string]interface{}{
"role_id": roleId,
}))
if err != nil {
return
}
id = rs.LastInsertId
return
}
//获取所有的角色
func (this *Role) GetAllRoles() (roles []map[string]string, err error) {
db := G.DB();
res, err := db.Query(db.AR().From("role").OrderBy("role_id", "ASC"));
if(err != nil) {
return
}
roles = res.Rows()
return
}
// 根据用户名查找所有的角色
func (this *Role) GetRolesByUserId (userId string) (roles []map[string]string, err error) {
userRoleModel := UserRole{}
userRoles, err := userRoleModel.GetUserRolesByUserId(userId)
if(err != nil) {
return
}
for _, userRole := range userRoles {
role, _ := this.GetRoleByRoleId(userRole["role_id"])
roles = append(roles, role)
}
return
}
+56
View File
@@ -0,0 +1,56 @@
package models
type RolePrivilege struct {
RolePrivilegeID uint `orm:"pk"` // role_privilege_id
RoleID uint // role_id
PrivilegeID uint // privilege_id
IsDelete int8 // is_delete
CreateTime uint // create_time
UpdateTime uint // update_time
}
//根据 role_id 获取权限
func (rolePrivilege *RolePrivilege) GetRolePrivilegesByRoleId(roleId int) (rolePrivileges []map[string]string, err error) {
db := G.DB()
res, err := db.Query(db.AR().From("role_privilege").Where(map[string]interface{}{
"role_id": roleId,
}))
if(err != nil) {
return
}
rolePrivileges = res.Rows()
return
}
//角色授权
func (rolePrivilege *RolePrivilege) GrantRolePrivileges(roleId int, privilegeIds []string) (res bool, err error) {
res = false
db := G.DB()
//先删除
_, err = db.Exec(db.AR().Delete("role_privilege", map[string]interface{}{
"role_id": roleId,
}))
if(err != nil) {
return
}
rolePrivileges := []map[string]interface{}{}
for _, privilegeId := range privilegeIds {
rolePrivilege := map[string]interface{}{
"role_id": roleId,
"privilege_id": privilegeId,
}
rolePrivileges = append(rolePrivileges, rolePrivilege)
}
//批量插入
_, err = db.Exec(db.AR().InsertBatch("role_privilege", rolePrivileges))
if err != nil {
return
}
res = true
return
}
+206
View File
@@ -0,0 +1,206 @@
package models
import (
"anytunnel/at-admin/app/utils"
"crypto/md5"
"encoding/hex"
"errors"
"strings"
"github.com/snail007/go-activerecord/mysql"
)
type User struct {
}
func (p *User) GetUserByUserId(userId string) (user map[string]string, err error) {
db := G.DB()
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("user").Where(map[string]interface{}{
"user_id": userId,
}))
if err != nil {
return
}
user = rs.Row()
return
}
func (p *User) HasSameUsername(userId, username string) (has bool, err error) {
db := G.DB()
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("user").Where(map[string]interface{}{
"user_id <>": userId,
"username": username,
}).Limit(0, 1))
if err != nil {
return
}
if rs.Len() > 0 {
has = true
}
return
}
func (p *User) HasUsername(username string) (has bool, err error) {
db := G.DB()
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("user").Where(map[string]interface{}{
"username": username,
}).Limit(0, 1))
if err != nil {
return
}
if rs.Len() > 0 {
has = true
}
return
}
func (p *User) GetUserByName(username string) (user map[string]string, err error) {
db := G.DB()
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("user").Where(map[string]interface{}{
"username": username,
}).Limit(0, 1))
if err != nil {
return
}
user = rs.Row()
return
}
//禁用
func (p *User) Forbidden(userId string) (err error) {
db := G.DB()
_, err = db.Exec(db.AR().Update("user", map[string]interface{}{
"is_forbidden": 1,
}, map[string]interface{}{
"user_id": userId,
}))
if err != nil {
return
}
return
}
//恢复
func (p *User) Review(userId string) (err error) {
db := G.DB()
_, err = db.Exec(db.AR().Update("user", map[string]interface{}{
"is_forbidden": 0,
}, map[string]interface{}{
"user_id": userId,
}))
if err != nil {
return
}
return
}
func (p *User) Insert(user map[string]interface{}) (id int64, err error) {
db := G.DB()
var rs *mysql.ResultSet
rs, err = db.Exec(db.AR().Insert("user", user))
if err != nil {
return
}
id = rs.LastInsertId
return
}
func (p *User) Update(userId string, user map[string]interface{}) (id int64, err error) {
db := G.DB()
var rs *mysql.ResultSet
rs, err = db.Exec(db.AR().Update("user", user, map[string]interface{}{
"user_id": userId,
}))
if err != nil {
return
}
id = rs.LastInsertId
return
}
func (p *User) ChangePassword(userId, newpassword, oldpassword string) (err error) {
db := G.DB()
user, err := p.GetUserByUserId(userId)
if user["password"] != p.EncodePassword(oldpassword) {
return errors.New("旧密码错误")
}
if err != nil {
return
}
_, err = db.Exec(db.AR().Update("user", map[string]interface{}{
"password": p.EncodePassword(newpassword),
}, map[string]interface{}{
"user_id": userId,
}))
if err != nil {
return
}
return
}
func (p *User) EncodePassword(password string) (passwordHash string) {
hasher := md5.New()
hasher.Write([]byte(password))
passwordHash = strings.ToLower(hex.EncodeToString(hasher.Sum(nil)))
return
}
//根据关键字分页获取用户
func (user *User) GetUsersByKeywordAndLimit(keyword string, limit int, number int) (users []map[string]string, err error) {
db := G.DB()
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("user").Where(map[string]interface{}{
"username LIKE": "%" + keyword + "%",
}).Limit(limit, number))
if err != nil {
return
}
users = rs.Rows()
return
}
//分页获取用户
func (user *User) GetUsersByLimit(limit int, number int) (users []map[string]string, err error) {
db := G.DB()
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("user").Limit(limit, number))
if err != nil {
return
}
users = rs.Rows()
return
}
func (user *User) CountUsers() (count int, err error) {
db := G.DB()
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().Select("count(*) as total").From("user"))
if err != nil {
return
}
count = utils.NewConvert().StringToInt(rs.Value("total"))
return
}
func (user *User) CountUsersByKeyword(keyword string) (count int, err error) {
db := G.DB()
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().
Select("count(*) as total").
From("user").
Where(map[string]interface{}{
"username LIKE": "%" + keyword + "%",
}))
if err != nil {
return
}
count = utils.NewConvert().StringToInt(rs.Value("total"))
return
}
+64
View File
@@ -0,0 +1,64 @@
package models
import (
"github.com/snail007/go-activerecord/mysql"
"time"
)
type UserRole struct {
UserRoleID uint `orm:"pk"` // user_role_id
UserID uint64 // user_id
RoleID uint // role_id
IsDelete int8 // is_delete
CreateTime uint // create_time
UpdateTime uint // update_time
}
func (this *UserRole) GetUserRolesByUserId(userId string) (userRoles []map[string]string, err error) {
db := G.DB();
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("user_role").Where(map[string]interface{}{
"user_id": userId,
"is_delete": 0,
}))
if err != nil {
return
}
userRoles = rs.Rows()
return
}
// 插入 user_id 和 role_id 对应关系
func (this *UserRole) Insert(userId string, roleIds []string) (res bool, err error) {
res = false
db := G.DB()
//先删除
_, err = db.Exec(db.AR().Delete("user_role", map[string]interface{}{
"user_id": userId,
}))
if(err != nil) {
return
}
//添加
userRoles := []map[string]interface{}{}
for _, roleId := range roleIds {
userRole := map[string]interface{}{
"role_id" : roleId,
"user_id" : userId,
"is_delete" : 0,
"create_time": time.Now().Unix(),
"update_time": time.Now().Unix(),
}
userRoles = append(userRoles, userRole)
}
_, err = db.Exec(db.AR().InsertBatch("user_role", userRoles))
if err != nil {
return
}
res = true
return
}