init push
This commit is contained in:
48
backend/repo/pg/node_group.go
Normal file
48
backend/repo/pg/node_group.go
Normal file
@@ -0,0 +1,48 @@
|
||||
package pg
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/chaitin/panda-wiki/consts"
|
||||
"github.com/chaitin/panda-wiki/domain"
|
||||
)
|
||||
|
||||
func (r *NodeRepository) GetNodeGroupsByGroupIdsPerm(ctx context.Context, authGroupIds []uint, perm consts.NodePermName) ([]domain.NodeAuthGroup, error) {
|
||||
nodeGroups := make([]domain.NodeAuthGroup, 0)
|
||||
|
||||
if err := r.db.WithContext(ctx).
|
||||
Model(&domain.NodeAuthGroup{}).
|
||||
Where("auth_group_id in (?) and perm = ?", authGroupIds, perm).Find(&nodeGroups).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return nodeGroups, nil
|
||||
}
|
||||
|
||||
// GetNodeAuthGroupIdsByNodeId 查询该node下的用户组(非部分开放的情况下无返回)
|
||||
func (r *NodeRepository) GetNodeAuthGroupIdsByNodeId(ctx context.Context, nodeId string, perm consts.NodePermName) ([]int, error) {
|
||||
|
||||
node, err := r.GetNodeByID(ctx, nodeId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
switch node.Permissions.Answerable {
|
||||
case consts.NodeAccessPermOpen:
|
||||
return nil, nil
|
||||
case consts.NodeAccessPermPartial:
|
||||
authGroupIds := make([]int, 0)
|
||||
|
||||
if err := r.db.WithContext(ctx).
|
||||
Model(&domain.NodeAuthGroup{}).
|
||||
Joins("left join nodes on nodes.id = node_auth_groups.node_id").
|
||||
Where("nodes.permissions->>'answerable' = ?", consts.NodeAccessPermPartial).
|
||||
Where("node_auth_groups.node_id = ? and node_auth_groups.perm = ?", nodeId, perm).
|
||||
Pluck("node_auth_groups.auth_group_id", &authGroupIds).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return authGroupIds, nil
|
||||
|
||||
case consts.NodeAccessPermClosed:
|
||||
return make([]int, 0), nil
|
||||
}
|
||||
return nil, nil
|
||||
}
|
||||
Reference in New Issue
Block a user