1.变量权限增加"只写"类型

2."只读"类型的权限会在写入请求时拒绝
3.开放了通讯配置的"属性侧"和字段名称修改权限
This commit is contained in:
iioter 2023-05-06 15:20:08 +08:00
parent 1e11ba2ef9
commit 803f35d01c
6 changed files with 17 additions and 10 deletions

View File

@ -20,7 +20,7 @@ namespace IoTGateway.ViewModel.BasicData.DeviceConfigVMs
{ {
this.MakeStandardAction("DeviceConfig", GridActionStandardTypesEnum.Create, Localizer["Sys.Create"],"BasicData", dialogWidth: 800), this.MakeStandardAction("DeviceConfig", GridActionStandardTypesEnum.Create, Localizer["Sys.Create"],"BasicData", dialogWidth: 800),
this.MakeStandardAction("DeviceConfig", GridActionStandardTypesEnum.Edit, Localizer["Sys.Edit"], "BasicData", dialogWidth: 800), this.MakeStandardAction("DeviceConfig", GridActionStandardTypesEnum.Edit, Localizer["Sys.Edit"], "BasicData", dialogWidth: 800),
//this.MakeStandardAction("DeviceConfig", GridActionStandardTypesEnum.Delete, Localizer["Sys.Delete"], "BasicData", dialogWidth: 800), this.MakeStandardAction("DeviceConfig", GridActionStandardTypesEnum.Delete, Localizer["Sys.Delete"], "BasicData", dialogWidth: 800),
this.MakeStandardAction("DeviceConfig", GridActionStandardTypesEnum.Details, Localizer["Sys.Details"], "BasicData", dialogWidth: 800), this.MakeStandardAction("DeviceConfig", GridActionStandardTypesEnum.Details, Localizer["Sys.Details"], "BasicData", dialogWidth: 800),
this.MakeStandardAction("DeviceConfig", GridActionStandardTypesEnum.BatchEdit, Localizer["Sys.BatchEdit"], "BasicData", dialogWidth: 800), this.MakeStandardAction("DeviceConfig", GridActionStandardTypesEnum.BatchEdit, Localizer["Sys.BatchEdit"], "BasicData", dialogWidth: 800),
//this.MakeStandardAction("DeviceConfig", GridActionStandardTypesEnum.BatchDelete, Localizer["Sys.BatchDelete"], "BasicData", dialogWidth: 800), //this.MakeStandardAction("DeviceConfig", GridActionStandardTypesEnum.BatchDelete, Localizer["Sys.BatchDelete"], "BasicData", dialogWidth: 800),

View File

@ -78,7 +78,7 @@ namespace IoTGateway.ViewModel.BasicData.DeviceVariableVMs
}), }),
this.MakeGridHeader(x => x.Expressions).SetWidth(150), this.MakeGridHeader(x => x.Expressions).SetWidth(150),
this.MakeGridHeader(x => x.IsUpload).SetWidth(80), this.MakeGridHeader(x => x.IsUpload).SetWidth(80),
//this.MakeGridHeader(x => x.ProtectType).SetSort(true), this.MakeGridHeader(x => x.ProtectType).SetWidth(80).SetSort(true),
this.MakeGridHeader(x => x.DeviceName_view).SetSort(true).SetWidth(90), this.MakeGridHeader(x => x.DeviceName_view).SetSort(true).SetWidth(90),
this.MakeGridHeader(x => x.Alias).SetSort(true).SetWidth(90), this.MakeGridHeader(x => x.Alias).SetSort(true).SetWidth(90),
this.MakeGridHeader(x => x.Timestamp).SetWidth(100).SetFormat((a,b)=>{ this.MakeGridHeader(x => x.Timestamp).SetWidth(100).SetFormat((a,b)=>{

View File

@ -10,6 +10,7 @@ using IoTGateway.Model;
using Plugin; using Plugin;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Primitives; using Microsoft.Extensions.Primitives;
using PluginInterface;
namespace IoTGateway.ViewModel.BasicData.DeviceVariableVMs namespace IoTGateway.ViewModel.BasicData.DeviceVariableVMs
{ {
@ -25,7 +26,11 @@ namespace IoTGateway.ViewModel.BasicData.DeviceVariableVMs
protected override void InitVM() protected override void InitVM()
{ {
this.Entity.IsUpload = true; if (this.ControllerName.ToLower().Contains("add"))
{
this.Entity.IsUpload = true;
this.Entity.ProtectType = ProtectTypeEnum.ReadWrite;
}
AllDevices = DC.Set<Device>().AsNoTracking().Where(x => x.DeviceTypeEnum == DeviceTypeEnum.Device) AllDevices = DC.Set<Device>().AsNoTracking().Where(x => x.DeviceTypeEnum == DeviceTypeEnum.Device)
.OrderBy(x => x.Parent.Index).ThenBy(x => x.Parent.DeviceName) .OrderBy(x => x.Parent.Index).ThenBy(x => x.Parent.DeviceName)
.OrderBy(x => x.Index).ThenBy(x => x.DeviceName) .OrderBy(x => x.Index).ThenBy(x => x.DeviceName)

View File

@ -3,7 +3,7 @@
<wt:form vm="@Model" height="400"> <wt:form vm="@Model" height="400">
<wt:row items-per-row="ItemsPerRowEnum.Two"> <wt:row items-per-row="ItemsPerRowEnum.Two">
@*<wt:textbox field="Entity.DeviceConfigName" />*@ <wt:textbox field="Entity.DeviceConfigName" />
@{ @{
if (!string.IsNullOrEmpty(Model.Entity.EnumInfo)) if (!string.IsNullOrEmpty(Model.Entity.EnumInfo))
{ {
@ -15,7 +15,7 @@
} }
} }
<wt:textbox field="Entity.Description" /> <wt:textbox field="Entity.Description" />
@*<wt:textbox field="Entity.EnumInfo" />*@ <wt:combobox field="Entity.DataSide" />
@*<wt:combobox field="Entity.DeviceId" items="AllDevices" />*@ @*<wt:combobox field="Entity.DeviceId" items="AllDevices" />*@
</wt:row> </wt:row>
<wt:hidden field="Entity.ID" /> <wt:hidden field="Entity.ID" />

View File

@ -74,7 +74,7 @@ namespace Plugin
{ {
if (driver.IsConnected) if (driver.IsConnected)
{ {
foreach (var deviceVariables in Device.DeviceVariables!.GroupBy(x => x.Alias)) foreach (var deviceVariables in Device.DeviceVariables.Where(x=>x.ProtectType!= ProtectTypeEnum.WriteOnly).GroupBy(x => x.Alias))
{ {
string deviceName = string.IsNullOrWhiteSpace(deviceVariables.Key) string deviceName = string.IsNullOrWhiteSpace(deviceVariables.Key)
? Device.DeviceName ? Device.DeviceName
@ -158,7 +158,7 @@ namespace Plugin
payLoad.TS = (long)(DateTime.UtcNow - _tsStartDt).TotalMilliseconds; payLoad.TS = (long)(DateTime.UtcNow - _tsStartDt).TotalMilliseconds;
if (deviceVariables.All(x => x.StatusType == VaribaleStatusTypeEnum.Good)) if (deviceVariables.Where(x=>x.IsUpload&&x.ProtectType!=ProtectTypeEnum.WriteOnly).All(x => x.StatusType == VaribaleStatusTypeEnum.Good))
{ {
payLoad.DeviceStatus = DeviceStatusTypeEnum.Good; payLoad.DeviceStatus = DeviceStatusTypeEnum.Good;
sendModel[deviceName] = new List<PayLoad> { payLoad }; sendModel[deviceName] = new List<PayLoad> { payLoad };
@ -173,7 +173,7 @@ namespace Plugin
} }
//只要有读取异常且连接正常就断开 //只要有读取异常且连接正常就断开
if (Device.DeviceVariables!.Any(x => x.StatusType != VaribaleStatusTypeEnum.Good) && driver.IsConnected) if (Device.DeviceVariables.Where(x => x.IsUpload && x.ProtectType != ProtectTypeEnum.WriteOnly).Any(x => x.StatusType != VaribaleStatusTypeEnum.Good) && driver.IsConnected)
{ {
driver.Close(); driver.Close();
driver.Dispose(); driver.Dispose();
@ -261,7 +261,7 @@ namespace Plugin
deviceVariable = Device.DeviceVariables.FirstOrDefault(x => deviceVariable = Device.DeviceVariables.FirstOrDefault(x =>
x.Name == para.Key && x.Alias == e.DeviceName); x.Name == para.Key && x.Alias == e.DeviceName);
if (deviceVariable != null) if (deviceVariable != null&& deviceVariable.ProtectType!= ProtectTypeEnum.ReadOnly)
{ {
DriverAddressIoArgModel ioArgModel = new() DriverAddressIoArgModel ioArgModel = new()
{ {
@ -280,7 +280,7 @@ namespace Plugin
else else
{ {
rpcResponse.IsSuccess = false; rpcResponse.IsSuccess = false;
rpcResponse.Description += $"未能找到变量:{para.Key},"; rpcResponse.Description += $"未能找到支持写入的变量:{para.Key},";
} }
} }

View File

@ -13,5 +13,7 @@ namespace PluginInterface
ReadOnly, ReadOnly,
[Display(Name = "读写")] [Display(Name = "读写")]
ReadWrite, ReadWrite,
[Display(Name = "只写")]
WriteOnly,
} }
} }