-
Notifications
You must be signed in to change notification settings - Fork 10
/
sys_user.go
executable file
·118 lines (107 loc) · 3.32 KB
/
sys_user.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
// Code generated by dol build. Only Generate by tools if not existed.
// source: sys_user.go
package srv
import (
"context"
"errors"
"fmt"
"html/template"
"strings"
"time"
"github.com/2637309949/dolphin/packages/xormplus/xorm"
"github.com/2637309949/dolphin/platform/svc"
"github.com/2637309949/dolphin/platform/util"
"github.com/2637309949/dolphin/platform/util/slice"
"github.com/sirupsen/logrus"
)
type SysUser struct {
svc.Svc
}
func NewSysUser() *SysUser {
return &SysUser{}
}
// TODO defined srv
func (srv *SysUser) TODO(ctx context.Context, db *xorm.Engine, params struct{}) (interface{}, error) {
cwt, cancel := context.WithTimeout(ctx, 5*time.Second)
defer cancel()
ticker := time.NewTicker(1 * time.Second)
defer ticker.Stop()
chi := func(context.Context) chan interface{} {
chi := make(chan interface{}, 1)
go func() {
time.Sleep(1 * time.Second)
chi <- 100
cancel()
close(chi)
}()
return chi
}(cwt)
for range ticker.C {
select {
case <-cwt.Done():
logrus.Infoln("child process interrupt...")
return <-chi, cwt.Err()
default:
logrus.Infoln("awaiting job...")
}
}
return nil, errors.New("no implementation found")
}
// PageFormatter defined TODO
func (srv *SysUser) PageFormatter(db1 *xorm.Engine) func(*xorm.Engine, []map[string]interface{}) ([]map[string]interface{}, error) {
return func(db2 *xorm.Engine, items []map[string]interface{}) (data []map[string]interface{}, err error) {
if uids, ok := slice.GetFieldSliceByName(items, "id").([]float64); ok {
roles, err := srv.GetUserRolesByUID(db1, uids)
if err != nil {
return data, err
}
data, err = slice.PatchSliceByField(items, roles, "id", "user_id", "role_name", "user_role")
if err != nil {
return data, err
}
}
if uorgs, ok := slice.GetFieldSliceByName(items, "org_id", "'%v'").([]string); ok {
orgs, err := srv.GetUserOrgsByUID(db1, strings.Join(uorgs, ","))
if err != nil {
return []map[string]interface{}{}, err
}
data, err = slice.PatchSliceByField(items, orgs, "org_id", "id", "org_id#id", "org_name#name")
if err != nil {
return data, err
}
}
return data, err
}
}
// GetOrgsFromInheritance defined srv
func (srv *SysUser) GetOrgsFromInheritance(db *xorm.Engine, cn string) ([]string, error) {
idst := struct {
IDS string `xorm:"ids"`
}{}
_, err := db.SQL(fmt.Sprintf(`select IFNULL(GROUP_CONCAT(id), '') ids, is_delete from sys_org where is_delete=0 and inheritance like "%v" group by is_delete`, "%"+cn+"%")).Get(&idst)
if err != nil {
return nil, err
}
// if id type...
ids := []string{}
for _, v := range strings.Split(idst.IDS, ",") {
ids = append(ids, fmt.Sprintf("'%v'", v))
}
return ids, nil
}
// GetUserRolesByUID defined
func (srv *SysUser) GetUserRolesByUID(db *xorm.Engine, ids []float64) ([]map[string]interface{}, error) {
roles, err := db.SqlTemplateClient("sys_role_user.tpl", &map[string]interface{}{"uids": template.HTML(util.JoinObject(ids))}).Query().List()
if err != nil {
return nil, err
}
return roles, err
}
// GetUserOrgsByUID defined
func (srv *SysUser) GetUserOrgsByUID(db *xorm.Engine, ids string) ([]map[string]interface{}, error) {
orgs, err := db.SqlTemplateClient("sys_user_org.tpl", &map[string]interface{}{"ne": template.HTML("<>"), "oids": template.HTML(ids)}).Query().List()
if err != nil {
return nil, err
}
return orgs, err
}