mirror of
https://github.com/casdoor/casdoor.git
synced 2025-05-23 10:45:47 +08:00
feat: add users to getGroups() and getGroup() APIs
This commit is contained in:
parent
6073a0f63d
commit
948fa911e2
@ -43,13 +43,20 @@ func (c *ApiController) GetGroups() {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
c.ResponseError(err.Error())
|
c.ResponseError(err.Error())
|
||||||
return
|
return
|
||||||
} else {
|
|
||||||
if withTree == "true" {
|
|
||||||
c.ResponseOk(object.ConvertToTreeData(groups, owner))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
c.ResponseOk(groups)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = object.ExtendGroupsWithUsers(groups)
|
||||||
|
if err != nil {
|
||||||
|
c.ResponseError(err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if withTree == "true" {
|
||||||
|
c.ResponseOk(object.ConvertToTreeData(groups, owner))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
c.ResponseOk(groups)
|
||||||
} else {
|
} else {
|
||||||
limit := util.ParseInt(limit)
|
limit := util.ParseInt(limit)
|
||||||
count, err := object.GetGroupCount(owner, field, value)
|
count, err := object.GetGroupCount(owner, field, value)
|
||||||
@ -64,6 +71,12 @@ func (c *ApiController) GetGroups() {
|
|||||||
c.ResponseError(err.Error())
|
c.ResponseError(err.Error())
|
||||||
return
|
return
|
||||||
} else {
|
} else {
|
||||||
|
err = object.ExtendGroupsWithUsers(groups)
|
||||||
|
if err != nil {
|
||||||
|
c.ResponseError(err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
c.ResponseOk(groups, paginator.Nums())
|
c.ResponseOk(groups, paginator.Nums())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -84,6 +97,13 @@ func (c *ApiController) GetGroup() {
|
|||||||
c.ResponseError(err.Error())
|
c.ResponseError(err.Error())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = object.ExtendGroupWithUsers(group)
|
||||||
|
if err != nil {
|
||||||
|
c.ResponseError(err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
c.ResponseOk(group)
|
c.ResponseOk(group)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,6 +17,7 @@ package object
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"sync"
|
||||||
|
|
||||||
"github.com/casdoor/casdoor/conf"
|
"github.com/casdoor/casdoor/conf"
|
||||||
"github.com/casdoor/casdoor/util"
|
"github.com/casdoor/casdoor/util"
|
||||||
@ -30,13 +31,13 @@ type Group struct {
|
|||||||
CreatedTime string `xorm:"varchar(100)" json:"createdTime"`
|
CreatedTime string `xorm:"varchar(100)" json:"createdTime"`
|
||||||
UpdatedTime string `xorm:"varchar(100)" json:"updatedTime"`
|
UpdatedTime string `xorm:"varchar(100)" json:"updatedTime"`
|
||||||
|
|
||||||
DisplayName string `xorm:"varchar(100)" json:"displayName"`
|
DisplayName string `xorm:"varchar(100)" json:"displayName"`
|
||||||
Manager string `xorm:"varchar(100)" json:"manager"`
|
Manager string `xorm:"varchar(100)" json:"manager"`
|
||||||
ContactEmail string `xorm:"varchar(100)" json:"contactEmail"`
|
ContactEmail string `xorm:"varchar(100)" json:"contactEmail"`
|
||||||
Type string `xorm:"varchar(100)" json:"type"`
|
Type string `xorm:"varchar(100)" json:"type"`
|
||||||
ParentId string `xorm:"varchar(100)" json:"parentId"`
|
ParentId string `xorm:"varchar(100)" json:"parentId"`
|
||||||
IsTopGroup bool `xorm:"bool" json:"isTopGroup"`
|
IsTopGroup bool `xorm:"bool" json:"isTopGroup"`
|
||||||
Users []*User `xorm:"-" json:"users"`
|
Users []string `xorm:"-" json:"users"`
|
||||||
|
|
||||||
Title string `json:"title,omitempty"`
|
Title string `json:"title,omitempty"`
|
||||||
Key string `json:"key,omitempty"`
|
Key string `json:"key,omitempty"`
|
||||||
@ -288,6 +289,55 @@ func GetGroupUsers(groupId string) ([]*User, error) {
|
|||||||
return users, nil
|
return users, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ExtendGroupWithUsers(group *Group) error {
|
||||||
|
if group == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
users, err := GetUsers(group.Owner)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
groupId := group.GetId()
|
||||||
|
userIds := []string{}
|
||||||
|
for _, user := range users {
|
||||||
|
if util.InSlice(user.Groups, groupId) {
|
||||||
|
userIds = append(userIds, user.GetId())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
group.Users = userIds
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func ExtendGroupsWithUsers(groups []*Group) error {
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
errChan := make(chan error, len(groups))
|
||||||
|
|
||||||
|
for _, group := range groups {
|
||||||
|
wg.Add(1)
|
||||||
|
go func(group *Group) {
|
||||||
|
defer wg.Done()
|
||||||
|
err := ExtendGroupWithUsers(group)
|
||||||
|
if err != nil {
|
||||||
|
errChan <- err
|
||||||
|
}
|
||||||
|
}(group)
|
||||||
|
}
|
||||||
|
|
||||||
|
wg.Wait()
|
||||||
|
close(errChan)
|
||||||
|
|
||||||
|
for err := range errChan {
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func GroupChangeTrigger(oldName, newName string) error {
|
func GroupChangeTrigger(oldName, newName string) error {
|
||||||
session := ormer.Engine.NewSession()
|
session := ormer.Engine.NewSession()
|
||||||
defer session.Close()
|
defer session.Close()
|
||||||
|
@ -177,6 +177,16 @@ class GroupEditPage extends React.Component {
|
|||||||
)} />
|
)} />
|
||||||
</Col>
|
</Col>
|
||||||
</Row>
|
</Row>
|
||||||
|
<Row style={{marginTop: "20px"}} >
|
||||||
|
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
|
||||||
|
{Setting.getLabel(i18next.t("general:Users"), i18next.t("general:Users - Tooltip"))} :
|
||||||
|
</Col>
|
||||||
|
<Col style={{marginTop: "5px"}} span={22} >
|
||||||
|
{
|
||||||
|
Setting.getTags(this.state.group.users, "users")
|
||||||
|
}
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
<Row style={{marginTop: "20px"}} >
|
<Row style={{marginTop: "20px"}} >
|
||||||
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 19 : 2}>
|
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 19 : 2}>
|
||||||
{Setting.getLabel(i18next.t("general:Is enabled"), i18next.t("general:Is enabled - Tooltip"))} :
|
{Setting.getLabel(i18next.t("general:Is enabled"), i18next.t("general:Is enabled - Tooltip"))} :
|
||||||
|
@ -195,6 +195,17 @@ class GroupListPage extends BaseListPage {
|
|||||||
</Link>;
|
</Link>;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
title: i18next.t("general:Users"),
|
||||||
|
dataIndex: "users",
|
||||||
|
key: "users",
|
||||||
|
// width: "200px",
|
||||||
|
sorter: true,
|
||||||
|
...this.getColumnSearchProps("users"),
|
||||||
|
render: (text, record, index) => {
|
||||||
|
return Setting.getTags(text, "users");
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
title: i18next.t("general:Action"),
|
title: i18next.t("general:Action"),
|
||||||
dataIndex: "",
|
dataIndex: "",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user