init
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user