代码拉取完成,页面将自动刷新
package logic
import (
"context"
"gitee.com/unitedrhino/share/ctxs"
"gitee.com/unitedrhino/share/def"
"gitee.com/unitedrhino/share/devices"
"gitee.com/unitedrhino/share/domain/schema"
"gitee.com/unitedrhino/share/errors"
"gitee.com/unitedrhino/things/service/dmsvr/internal/domain/userShared"
"gitee.com/unitedrhino/things/service/dmsvr/internal/svc"
"strings"
)
func Auth(ctx context.Context, svcCtx *svc.ServiceContext, in devices.Core) (devices.Auth, error) { //鉴权
uc := ctxs.GetUserCtx(ctx)
if uc == nil || uc.IsSuperAdmin { //为空只可能是外部rpc调用
return devices.AuthAll, nil
}
di, err := svcCtx.DeviceCache.GetData(ctx, devices.Core{
ProductID: in.ProductID,
DeviceName: in.DeviceName,
})
if err != nil {
return devices.AuthNone, err
}
if di.TenantCode != uc.TenantCode {
return devices.AuthNone, errors.Permissions.AddDetail("租户号不一致")
}
pa := uc.ProjectAuth[di.ProjectID]
if pa == nil { //有可能是 分享的设备及管理员
if uc.IsAdmin {
if di.UserID == 0 {
return devices.AuthAll, nil
}
//管理员操作被绑定的设备只能操作系统功能
return devices.AuthSystem, nil
}
}
return devices.AuthAll, nil
}
func SchemaAccess(ctx context.Context, svcCtx *svc.ServiceContext, authType def.AuthType, dev devices.Core, param map[string]any) (outParam map[string]any, err error) {
uc := ctxs.GetUserCtx(ctx)
if uc != nil && !uc.IsAdmin {
di, err := svcCtx.DeviceCache.GetData(ctx, dev)
if err != nil {
return nil, err
}
_, ok := uc.ProjectAuth[di.ProjectID]
if !ok {
uds, err := svcCtx.UserDeviceShare.GetData(ctx, userShared.UserShareKey{
ProductID: dev.ProductID,
DeviceName: dev.DeviceName,
SharedUserID: uc.UserID,
})
if err != nil {
return nil, errors.Permissions.AddDetail(err)
}
if uds.AuthType == def.AuthAdmin {
return param, nil
}
for k := range param {
sp := uds.SchemaPerm[k]
if sp == nil && strings.Contains(k, ".") { //数组类型
k, _, _ := schema.GetArray(k)
sp = uds.SchemaPerm[k]
}
if sp != nil && sp.Perm > authType {
return nil, errors.Parameter.AddMsgf("属性:%v 没有控制权限", k)
}
}
return param, nil
}
return param, nil
}
return param, nil
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。