1
0
Fork 0
mirror of https://github.com/documize/community.git synced 2025-08-04 13:05:23 +02:00

returns users you can see spaces

This commit is contained in:
Harvey Kandola 2017-10-05 15:02:39 -04:00
parent c8dc284d03
commit de384f2412
2 changed files with 20 additions and 34 deletions

View file

@ -107,7 +107,7 @@ type UserStorer interface {
GetActiveUsersForOrganization(ctx RequestContext) (u []user.User, err error) GetActiveUsersForOrganization(ctx RequestContext) (u []user.User, err error)
GetUsersForOrganization(ctx RequestContext) (u []user.User, err error) GetUsersForOrganization(ctx RequestContext) (u []user.User, err error)
GetSpaceUsers(ctx RequestContext, spaceID string) (u []user.User, err error) GetSpaceUsers(ctx RequestContext, spaceID string) (u []user.User, err error)
GetVisibleUsers(ctx RequestContext) (u []user.User, err error) GetUsersForSpaces(ctx RequestContext, spaces []string) (u []user.User, err error)
UpdateUser(ctx RequestContext, u user.User) (err error) UpdateUser(ctx RequestContext, u user.User) (err error)
UpdateUserPassword(ctx RequestContext, userID, salt, password string) (err error) UpdateUserPassword(ctx RequestContext, userID, salt, password string) (err error)
DeactiveUser(ctx RequestContext, userID string) (err error) DeactiveUser(ctx RequestContext, userID string) (err error)

View file

@ -20,6 +20,7 @@ import (
"github.com/documize/community/core/env" "github.com/documize/community/core/env"
"github.com/documize/community/domain" "github.com/documize/community/domain"
"github.com/documize/community/model/user" "github.com/documize/community/model/user"
"github.com/jmoiron/sqlx"
"github.com/pkg/errors" "github.com/pkg/errors"
) )
@ -140,7 +141,7 @@ func (s Scope) GetUsersForOrganization(ctx domain.RequestContext) (u []user.User
return return
} }
// GetSpaceUsers returns a slice containing all user records for given folder. // GetSpaceUsers returns a slice containing all user records for given space.
func (s Scope) GetSpaceUsers(ctx domain.RequestContext, spaceID string) (u []user.User, err error) { func (s Scope) GetSpaceUsers(ctx domain.RequestContext, spaceID string) (u []user.User, err error) {
err = s.Runtime.Db.Select(&u, ` 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, 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,
@ -150,7 +151,7 @@ func (s Scope) GetSpaceUsers(ctx domain.RequestContext, spaceID string) (u []use
SELECT whoid from permission WHERE orgid=? AND who='user' AND scope='object' AND location='space' AND refid=? UNION ALL SELECT whoid from permission WHERE orgid=? AND who='user' AND scope='object' AND location='space' AND refid=? UNION ALL
SELECT r.userid from rolemember r LEFT JOIN permission p ON p.whoid=r.roleid WHERE p.orgid=? AND p.who='role' AND p.scope='object' AND p.location='space' AND p.refid=? SELECT r.userid from rolemember r LEFT JOIN permission p ON p.whoid=r.roleid WHERE p.orgid=? AND p.who='role' AND p.scope='object' AND p.location='space' AND p.refid=?
) )
ORDER BY u.firstname, u.lastname; ORDER BY u.firstname, u.lastname
`, ctx.OrgID, ctx.OrgID, spaceID, ctx.OrgID, spaceID) `, ctx.OrgID, ctx.OrgID, spaceID, ctx.OrgID, spaceID)
if err != nil { if err != nil {
@ -160,39 +161,24 @@ func (s Scope) GetSpaceUsers(ctx domain.RequestContext, spaceID string) (u []use
return return
} }
// GetVisibleUsers returns all users that can be "seen" by a user. // GetUsersForSpaces returns users with access to specified spaces.
// "Seen" means users who share at least one space in common. func (s Scope) GetUsersForSpaces(ctx domain.RequestContext, spaces []string) (u []user.User, err error) {
// Explicit access must be provided to a user in order to associate them query, args, err := sqlx.In(`
// as having access to a space. Simply marking a space as vieewable by "everyone" is not enough. 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,
func (s Scope) GetVisibleUsers(ctx domain.RequestContext) (u []user.User, err error) { a.active, a.users AS viewusers, a.editor, a.admin
err = s.Runtime.Db.Select(&u, FROM user u, account a
`SELECT id, refid, firstname, lastname, email, initials, password, salt, reset, created, revised WHERE a.orgid=? AND u.refid = a.userid AND a.active=1 AND u.refid IN (
FROM user SELECT whoid from permission WHERE orgid=? AND who='user' AND scope='object' AND location='space' AND refid IN(?) UNION ALL
WHERE SELECT r.userid from rolemember r LEFT JOIN permission p ON p.whoid=r.roleid WHERE p.orgid=? AND p.who='role' AND p.scope='object' AND p.location='space' AND p.refid IN(?)
refid IN (SELECT userid FROM account WHERE orgid = ?) )
AND refid IN ORDER BY u.firstname, u.lastname
(SELECT userid FROM labelrole where userid != '' AND orgid=? `, ctx.OrgID, ctx.OrgID, spaces, ctx.OrgID, spaces)
AND labelid IN (
SELECT refid FROM label WHERE orgid=? AND type=2 AND userid=? query = s.Runtime.Db.Rebind(query)
UNION ALL err = s.Runtime.Db.Select(&u, query, args...)
SELECT refid FROM label a WHERE orgid=? AND type=1 AND refid IN (SELECT labelid FROM labelrole WHERE orgid=? AND userid='' AND (canedit=1 OR canview=1))
UNION ALL
SELECT refid FROM label a WHERE orgid=? AND type=3 AND refid IN (SELECT labelid FROM labelrole WHERE orgid=? AND userid=? AND (canedit=1 OR canview=1))
)
GROUP BY userid)
ORDER BY firstname, lastname`,
ctx.OrgID,
ctx.OrgID,
ctx.OrgID,
ctx.UserID,
ctx.OrgID,
ctx.OrgID,
ctx.OrgID,
ctx.OrgID,
ctx.UserID)
if err != nil { if err != nil {
err = errors.Wrap(err, fmt.Sprintf("get visible users for org %s user %s", ctx.OrgID, ctx.UserID)) err = errors.Wrap(err, fmt.Sprintf("get users for spaces for user %s", ctx.UserID))
} }
return return