mirror of
https://github.com/documize/community.git
synced 2025-08-04 21:15:24 +02:00
add/remove group membership
This commit is contained in:
parent
0b5ed8fd9e
commit
ed11c0ad11
17 changed files with 287 additions and 87 deletions
|
@ -94,7 +94,7 @@ func (h *Handler) Sync(w http.ResponseWriter, r *http.Request) {
|
|||
}
|
||||
|
||||
// User list from Documize
|
||||
dmzUsers, err := h.Store.User.GetUsersForOrganization(ctx)
|
||||
dmzUsers, err := h.Store.User.GetUsersForOrganization(ctx, "")
|
||||
if err != nil {
|
||||
result.Message = "Error: unable to fetch Documize users"
|
||||
result.IsError = true
|
||||
|
|
|
@ -141,3 +141,25 @@ func (s Scope) LeaveGroup(ctx domain.RequestContext, groupID, userID string) (er
|
|||
|
||||
return
|
||||
}
|
||||
|
||||
// GetMembers returns members for every group.
|
||||
// Useful when you need to bulk fetch membership records
|
||||
// for subsequent processing.
|
||||
func (s Scope) GetMembers(ctx domain.RequestContext) (r []group.Record, err error) {
|
||||
err = s.Runtime.Db.Select(&r,
|
||||
`SELECT a.id, a.orgid, a.roleid, a.userid, b.role as name, b.purpose
|
||||
FROM rolemember a, role b
|
||||
WHERE a.orgid=? AND a.roleid=b.refid
|
||||
ORDER BY a.userid`,
|
||||
ctx.OrgID)
|
||||
|
||||
if err == sql.ErrNoRows || len(r) == 0 {
|
||||
err = nil
|
||||
r = []group.Record{}
|
||||
}
|
||||
if err != nil {
|
||||
err = errors.Wrap(err, "select group members")
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
|
|
@ -110,7 +110,7 @@ type UserStorer interface {
|
|||
GetByToken(ctx RequestContext, token string) (u user.User, err error)
|
||||
GetBySerial(ctx RequestContext, serial string) (u user.User, err error)
|
||||
GetActiveUsersForOrganization(ctx RequestContext) (u []user.User, err error)
|
||||
GetUsersForOrganization(ctx RequestContext) (u []user.User, err error)
|
||||
GetUsersForOrganization(ctx RequestContext, filter string) (u []user.User, err error)
|
||||
GetSpaceUsers(ctx RequestContext, spaceID string) (u []user.User, err error)
|
||||
GetUsersForSpaces(ctx RequestContext, spaces []string) (u []user.User, err error)
|
||||
UpdateUser(ctx RequestContext, u user.User) (err error)
|
||||
|
@ -277,6 +277,7 @@ type GroupStorer interface {
|
|||
Update(ctx RequestContext, g group.Group) (err error)
|
||||
Delete(ctx RequestContext, refID string) (rows int64, err error)
|
||||
GetGroupMembers(ctx RequestContext, groupID string) (m []group.Member, err error)
|
||||
GetMembers(ctx RequestContext) (r []group.Record, err error)
|
||||
JoinGroup(ctx RequestContext, groupID, userID string) (err error)
|
||||
LeaveGroup(ctx RequestContext, groupID, userID string) (err error)
|
||||
}
|
||||
|
|
|
@ -35,6 +35,7 @@ import (
|
|||
"github.com/documize/community/domain/organization"
|
||||
"github.com/documize/community/model/account"
|
||||
"github.com/documize/community/model/audit"
|
||||
"github.com/documize/community/model/group"
|
||||
"github.com/documize/community/model/user"
|
||||
)
|
||||
|
||||
|
@ -228,6 +229,8 @@ func (h *Handler) GetOrganizationUsers(w http.ResponseWriter, r *http.Request) {
|
|||
return
|
||||
}
|
||||
|
||||
filter := request.Query(r, "filter")
|
||||
|
||||
active, err := strconv.ParseBool(request.Query(r, "active"))
|
||||
if err != nil {
|
||||
active = false
|
||||
|
@ -243,20 +246,33 @@ func (h *Handler) GetOrganizationUsers(w http.ResponseWriter, r *http.Request) {
|
|||
return
|
||||
}
|
||||
} else {
|
||||
u, err = h.Store.User.GetUsersForOrganization(ctx)
|
||||
u, err = h.Store.User.GetUsersForOrganization(ctx, filter)
|
||||
if err != nil && err != sql.ErrNoRows {
|
||||
response.WriteServerError(w, method, err)
|
||||
h.Runtime.Log.Error(method, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if len(u) == 0 {
|
||||
u = []user.User{}
|
||||
// prefetch all group membership records
|
||||
groups, err := h.Store.Group.GetMembers(ctx)
|
||||
if err != nil && err != sql.ErrNoRows {
|
||||
response.WriteServerError(w, method, err)
|
||||
h.Runtime.Log.Error(method, err)
|
||||
return
|
||||
}
|
||||
|
||||
// for each user...
|
||||
for i := range u {
|
||||
// 1. attach user accounts
|
||||
AttachUserAccounts(ctx, *h.Store, ctx.OrgID, &u[i])
|
||||
|
||||
// 2. attach user groups
|
||||
u[i].Groups = []group.Record{}
|
||||
for j := range groups {
|
||||
if groups[j].UserID == u[i].RefID {
|
||||
u[i].Groups = append(u[i].Groups, groups[j])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
response.WriteJSON(w, u)
|
||||
|
|
|
@ -118,6 +118,11 @@ func (s Scope) GetActiveUsersForOrganization(ctx domain.RequestContext) (u []use
|
|||
ORDER BY u.firstname,u.lastname`,
|
||||
ctx.OrgID)
|
||||
|
||||
if err == sql.ErrNoRows || len(u) == 0 {
|
||||
err = nil
|
||||
u = []user.User{}
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
err = errors.Wrap(err, fmt.Sprintf("get active users by org %s", ctx.OrgID))
|
||||
}
|
||||
|
@ -127,13 +132,24 @@ func (s Scope) GetActiveUsersForOrganization(ctx domain.RequestContext) (u []use
|
|||
|
||||
// GetUsersForOrganization returns a slice containing all of the user records for the organizaiton
|
||||
// identified in the Persister.
|
||||
func (s Scope) GetUsersForOrganization(ctx domain.RequestContext) (u []user.User, err error) {
|
||||
func (s Scope) GetUsersForOrganization(ctx domain.RequestContext, filter string) (u []user.User, err error) {
|
||||
filter = strings.TrimSpace(strings.ToLower(filter))
|
||||
likeQuery := ""
|
||||
if len(filter) > 0 {
|
||||
likeQuery = " AND (LOWER(u.firstname) LIKE '%" + filter + "%' OR LOWER(u.lastname) LIKE '%" + filter + "%' OR LOWER(u.email) LIKE '%" + filter + "%') "
|
||||
}
|
||||
|
||||
err = s.Runtime.Db.Select(&u,
|
||||
`SELECT u.id, u.refid, u.firstname, u.lastname, u.email, u.initials, u.password, u.salt, u.reset, u.created, u.revised,
|
||||
u.global, a.active, a.editor, a.admin, a.users as viewusers
|
||||
FROM user u, account a
|
||||
WHERE u.refid=a.userid AND a.orgid=?
|
||||
ORDER BY u.firstname, u.lastname`, ctx.OrgID)
|
||||
WHERE u.refid=a.userid AND a.orgid=? `+likeQuery+
|
||||
`ORDER BY u.firstname, u.lastname LIMIT 100`, ctx.OrgID)
|
||||
|
||||
if err == sql.ErrNoRows || len(u) == 0 {
|
||||
err = nil
|
||||
u = []user.User{}
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
err = errors.Wrap(err, fmt.Sprintf(" get users for org %s", ctx.OrgID))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue