internal RowFieldsBase InitInstance(Row row) { this.Initialize(); if (initializedInstance) { return(this); } var attr = rowType.GetCustomAttribute <FieldReadPermissionAttribute>(); if (attr != null && attr.Permission != null) { var permission = attr.Permission; if (attr.ApplyToLookups) { foreach (var field in this) { if (field.ReadPermission == null) { field.ReadPermission = permission; } } } else { var idField = (row as IIdRow).IdField as Field; var nameField = row.GetNameField(); foreach (var field in this) { if (field.ReadPermission == null && !ReferenceEquals(idField, field) && !ReferenceEquals(nameField, field) && field.GetAttribute <LookupIncludeAttribute>() == null) { field.ReadPermission = permission; } } } } initializedInstance = true; return(this); }