swirl/biz/role.go

104 lines
2.4 KiB
Go
Raw Normal View History

2017-09-26 12:50:09 +00:00
package biz
import (
2021-12-06 12:24:22 +00:00
"context"
2017-09-26 12:50:09 +00:00
"github.com/cuigh/auxo/net/web"
"github.com/cuigh/swirl/dao"
)
2021-12-06 12:24:22 +00:00
type RoleBiz interface {
2022-01-06 08:54:14 +00:00
Search(ctx context.Context, name string) ([]*dao.Role, error)
Find(ctx context.Context, id string) (role *dao.Role, err error)
Create(ctx context.Context, role *dao.Role, user web.User) (err error)
Delete(ctx context.Context, id, name string, user web.User) (err error)
Update(ctx context.Context, r *dao.Role, user web.User) (err error)
GetPerms(ctx context.Context, ids []string) ([]string, error)
2017-09-26 12:50:09 +00:00
}
2021-12-06 12:24:22 +00:00
func NewRole(d dao.Interface, eb EventBiz) RoleBiz {
return &roleBiz{d: d, eb: eb}
}
type roleBiz struct {
d dao.Interface
eb EventBiz
}
2022-01-06 08:54:14 +00:00
func (b *roleBiz) Search(ctx context.Context, name string) (roles []*dao.Role, err error) {
return b.d.RoleSearch(ctx, name)
2017-09-26 12:50:09 +00:00
}
2022-01-06 08:54:14 +00:00
func (b *roleBiz) Create(ctx context.Context, role *dao.Role, user web.User) (err error) {
2021-12-23 11:28:31 +00:00
r := &dao.Role{
2021-12-06 12:24:22 +00:00
ID: createId(),
Name: role.Name,
Description: role.Description,
Perms: role.Perms,
2021-12-16 12:23:08 +00:00
CreatedAt: now(),
CreatedBy: newOperator(user),
2021-12-06 12:24:22 +00:00
}
r.UpdatedAt = r.CreatedAt
2021-12-16 12:23:08 +00:00
r.UpdatedBy = r.CreatedBy
2022-01-06 08:54:14 +00:00
err = b.d.RoleCreate(ctx, r)
2021-12-06 12:24:22 +00:00
if err == nil {
b.eb.CreateRole(EventActionCreate, r.ID, role.Name, user)
}
return
}
2017-09-26 12:50:09 +00:00
2022-01-06 08:54:14 +00:00
func (b *roleBiz) Delete(ctx context.Context, id, name string, user web.User) (err error) {
err = b.d.RoleDelete(ctx, id)
2021-12-06 12:24:22 +00:00
if err == nil {
go func() {
2022-01-06 08:54:14 +00:00
_ = b.d.SessionUpdateDirty(ctx, "", id)
b.eb.CreateRole(EventActionDelete, id, name, user)
}()
2021-12-06 12:24:22 +00:00
}
2017-09-26 12:50:09 +00:00
return
}
2022-01-06 08:54:14 +00:00
func (b *roleBiz) Find(ctx context.Context, id string) (role *dao.Role, err error) {
return b.d.RoleGet(ctx, id)
2017-09-26 12:50:09 +00:00
}
2022-01-06 08:54:14 +00:00
func (b *roleBiz) Update(ctx context.Context, role *dao.Role, user web.User) (err error) {
2021-12-23 11:28:31 +00:00
r := &dao.Role{
2021-12-06 12:24:22 +00:00
ID: role.ID,
Name: role.Name,
Description: role.Description,
Perms: role.Perms,
2021-12-16 12:23:08 +00:00
UpdatedAt: now(),
UpdatedBy: newOperator(user),
2021-12-06 12:24:22 +00:00
}
2022-01-06 08:54:14 +00:00
err = b.d.RoleUpdate(ctx, r)
2021-12-06 12:24:22 +00:00
if err == nil {
go func() {
2022-01-06 08:54:14 +00:00
_ = b.d.SessionUpdateDirty(ctx, "", role.ID)
b.eb.CreateRole(EventActionUpdate, role.ID, role.Name, user)
}()
2021-12-06 12:24:22 +00:00
}
2017-09-26 12:50:09 +00:00
return
}
2022-01-06 08:54:14 +00:00
func (b *roleBiz) GetPerms(ctx context.Context, ids []string) ([]string, error) {
m := make(map[string]struct{})
for _, id := range ids {
2022-01-06 08:54:14 +00:00
r, err := b.d.RoleGet(ctx, id)
if err != nil {
return nil, err
}
for _, p := range r.Perms {
m[p] = struct{}{}
}
}
perms := make([]string, 0, len(m))
for p := range m {
perms = append(perms, p)
}
return perms, nil
}