1
0
mirror of https://github.com/1C-Company/v8-code-style.git synced 2024-11-28 09:33:06 +02:00

#207 Реализация проверки прив. режима получения данных в ФО (#1307)

This commit is contained in:
Vadim Goncharov 2023-04-17 00:13:59 +03:00 committed by GitHub
parent 43ba74d159
commit 39169c1581
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
20 changed files with 346 additions and 3 deletions

View File

@ -14,6 +14,7 @@
- Реквизит "Комментарий" имеет корректный тип
- В документе, предполагающем проведение, не установлен флаг "Привилегированный режим при проведении / отмене проведения"
- Проверка наличия буквы "ё" в имени, синониме или комментарии объекта метаданных
- В функциональной опции не установлен флаг "Привилегированный режим при получении"
#### Формы

View File

@ -0,0 +1,19 @@
# Functional option don't set flag "Privileged get mode"
1.8. All functional options must have the "Privileged mode upon receiving"
check boxes selected.
Exception: a configuration can include parameterized functional options, for which developers
provide for differences in values obtained by users with different rights.
Example: There is a parameterized functional option UseCurrencyUponSettlementsWithPersonnel,
which is parameterized by the company. If a user receives its value in the context of their rights,
they will not see the Currency field in the document if they do not have a company where currency
accounting is applied.
## Noncompliant Code Example
## Compliant Solution
## See
[Configuring roles and access rights](https://kb.1ci.com/1C_Enterprise_Platform/Guides/Developer_Guides/1C_Enterprise_Development_Standards/Setting_data_access_rights/Configuring_roles_and_access_rights/)

View File

@ -0,0 +1,21 @@
# В функциональной опции не установлен флаг "Привилегированный режим при получении"
Во всех функциональных опциях должны быть выставлены флаги
«Привилегированный режим при получении».
Исключение: в конфигурации могут быть предусмотрены параметризированные
ФО, для которых разработчик специально предусматривает различия в
получаемых значениях пользователями с разными правами.
Пример: Есть параметризованная ФО
ИспользватьВалютуПриРасчетеСПерсоналом, которая параметризуется
организацией. Если пользователь будет получать ее значение в контексте
своих прав, то он не увидит поле «валюта» в документе, если у него нет
ни одной организации, где применяется валютный учет.
## Неправильно
## Правильно
## См.
[Настройка ролей и прав доступа](https://its.1c.ru/db/v8std#content:689:hdoc:1.8)

View File

@ -126,6 +126,10 @@
category="com.e1c.v8codestyle.md"
class="com.e1c.v8codestyle.md.check.MdObjectAttributeCommentNotExistCheck">
</check>
<check
category="com.e1c.v8codestyle.md"
class="com.e1c.v8codestyle.md.check.FunctionalOptionPrivilegedGetModeCheck">
</check>
</extension>
</plugin>
</plugin>

View File

@ -0,0 +1,81 @@
/*******************************************************************************
* Copyright (C) 2023, 1C-Soft LLC and others.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* 1C-Soft LLC - initial API and implementation
*******************************************************************************/
package com.e1c.v8codestyle.md.check;
import static com._1c.g5.v8.dt.metadata.mdclass.MdClassPackage.Literals.FUNCTIONAL_OPTION;
import static com._1c.g5.v8.dt.metadata.mdclass.MdClassPackage.Literals.FUNCTIONAL_OPTION__PRIVILEGED_GET_MODE;
import static com._1c.g5.v8.dt.metadata.mdclass.MdClassPackage.Literals.FUNCTIONAL_OPTION__LOCATION;
import org.eclipse.core.runtime.IProgressMonitor;
import com._1c.g5.v8.dt.metadata.mdclass.FunctionalOption;
import com.e1c.g5.v8.dt.check.CheckComplexity;
import com.e1c.g5.v8.dt.check.ICheckParameters;
import com.e1c.g5.v8.dt.check.components.BasicCheck;
import com.e1c.g5.v8.dt.check.settings.IssueSeverity;
import com.e1c.g5.v8.dt.check.settings.IssueType;
import com.e1c.v8codestyle.check.StandardCheckExtension;
import com.e1c.v8codestyle.internal.md.CorePlugin;
/**
* Check functional option use privileged get mode.
* @author Vadim Goncharov
*/
public class FunctionalOptionPrivilegedGetModeCheck
extends BasicCheck
{
private static final String CHECK_ID = "functional-option-privileged-get-mode"; //$NON-NLS-1$
public FunctionalOptionPrivilegedGetModeCheck()
{
super();
}
@Override
public String getCheckId()
{
return CHECK_ID;
}
@Override
protected void configureCheck(CheckConfigurer builder)
{
builder.title(Messages.FunctionalOptionPrivilegedGetModeCheck_title)
.description(Messages.FunctionalOptionPrivilegedGetModeCheck_description)
.complexity(CheckComplexity.NORMAL)
.severity(IssueSeverity.MAJOR)
.issueType(IssueType.WARNING)
.extension(new StandardCheckExtension(689, getCheckId(), CorePlugin.PLUGIN_ID))
.extension(new SkipAdoptedInExtensionMdObjectExtension())
.topObject(FUNCTIONAL_OPTION)
.checkTop()
.features(FUNCTIONAL_OPTION__PRIVILEGED_GET_MODE, FUNCTIONAL_OPTION__LOCATION);
}
@Override
protected void check(Object object, ResultAcceptor resultAcceptor, ICheckParameters parameters,
IProgressMonitor monitor)
{
FunctionalOption fo = (FunctionalOption)object;
if (!monitor.isCanceled() && fo.getLocation() != null && !fo.isPrivilegedGetMode())
{
resultAcceptor.addIssue(Messages.FunctionalOptionPrivilegedGetModeCheck_message, fo,
FUNCTIONAL_OPTION__PRIVILEGED_GET_MODE);
}
}
}

View File

@ -72,6 +72,9 @@ final class Messages
public static String ExtensionMdObjectNamePrefixCheck_Description;
public static String ExtensionMdObjectNamePrefixCheck_Object_0_should_have_1_prefix;
public static String ExtensionMdObjectNamePrefixCheck_Title;
public static String FunctionalOptionPrivilegedGetModeCheck_description;
public static String FunctionalOptionPrivilegedGetModeCheck_message;
public static String FunctionalOptionPrivilegedGetModeCheck_title;
public static String MdObjectNameLength_description;
public static String MdObjectNameLength_Maximum_name_length_description;
public static String MdObjectNameLength_message;

View File

@ -73,6 +73,12 @@ ExtensionMdObjectNamePrefixCheck_Object_0_should_have_1_prefix = The object "{0}
ExtensionMdObjectNamePrefixCheck_Title = Extension object name does not have extension prefix
FunctionalOptionPrivilegedGetModeCheck_message = Functional option don't use privileged get mode
FunctionalOptionPrivilegedGetModeCheck_description = Functional option don't use privileged get mode
FunctionalOptionPrivilegedGetModeCheck_title = Functional option don't use privileged get mode
MdListObjectPresentationCheck_Neither_Object_presentation_nor_List_presentation_is_not_filled = Neither Object presentation nor List presentation is not filled
MdListObjectPresentationCheck_decription = Neither Object presentation nor List presentation is not filled

View File

@ -60,20 +60,26 @@ DbObjectRefNonRefTypesCheck_Ref_and_other = Реквизиты составно
DbObjectRefNonRefTypesCheck_Title = Использование составного типа, содержащего ссылочные и не ссылочный тип вместе.
DocumentPostInPrivilegedModeCheck_title = В документе, предполагающем проведение, не стоит флаг "Прив. режим при проведении/отмене проведения"
DocumentPostInPrivilegedModeCheck_description = В документе, предполагающем проведение, не стоит флаг "Прив. режим при проведении/отмене проведения"
DocumentPostInPrivilegedModeCheck_message_Post_in_privileged_mode = В документе, предполагающем проведение, не стоит флаг "Прив. режим при проведении"
DocumentPostInPrivilegedModeCheck_message_Unpost_in_privileged_mode = В документе, предполагающем проведение, не стоит флаг "Прив. режим при отмене проведения"
DocumentPostInPrivilegedModeCheck_title = В документе, предполагающем проведение, не стоит флаг "Прив. режим при проведении/отмене проведения"
ExtensionMdObjectNamePrefixCheck_Description = Имя объекта в расширении не содержит префикс расширения
ExtensionMdObjectNamePrefixCheck_Object_0_should_have_1_prefix = Имя объекта "{0}" должно содержать префикс "{1}"
ExtensionMdObjectNamePrefixCheck_Title = Имя объекта в расширении должно содержать префикс расширения
FunctionalOptionPrivilegedGetModeCheck_message = В функциональной опции не установлен флаг "Привилегированный режим при получении"
FunctionalOptionPrivilegedGetModeCheck_description = В функциональной опции не установлен флаг "Привилегированный режим при получении"
FunctionalOptionPrivilegedGetModeCheck_title = В функциональной опции не установлен флаг "Привилегированный режим при получении"
MdListObjectPresentationCheck_Neither_Object_presentation_nor_List_presentation_is_not_filled = Не заполнено ни представление объекта, ни представление списка
MdListObjectPresentationCheck_decription = Не заполнено ни представление объекта, ни представление списка

View File

@ -0,0 +1,63 @@
/*******************************************************************************
* Copyright (C) 2023, 1C-Soft LLC and others.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* 1C-Soft LLC - initial API and implementation
*******************************************************************************/
package com.e1c.v8codestyle.md.check.itests;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import org.junit.Test;
import com._1c.g5.v8.dt.core.platform.IDtProject;
import com._1c.g5.v8.dt.validation.marker.Marker;
import com.e1c.g5.v8.dt.testing.check.CheckTestBase;
import com.e1c.v8codestyle.md.check.FunctionalOptionPrivilegedGetModeCheck;
/**
* The test class for {@link FunctionalOptionPrivilegedGetModeCheck}
* @author Vadim Goncharov
*/
public class FunctionalOptionPrivilegedGetModeTest
extends CheckTestBase
{
private static final String CHECK_ID = "functional-option-privileged-get-mode";
private static final String PROJECT_NAME = "FunctionalOptionPrivilegedGetMode";
/**
* Test functional options use privileged get mode check.
*
* @throws Exception the exception
*/
@Test
public void testFunctionalOptionsUsePrivilegedGetModeCheck() throws Exception
{
IDtProject project = openProjectAndWaitForValidationFinish(PROJECT_NAME);
assertNotNull(project);
long id = getTopObjectIdByFqn("FunctionalOption.UseOrganisations", project);
Marker marker = getFirstMarker(CHECK_ID, id, project);
assertNotNull(marker);
id = getTopObjectIdByFqn("FunctionalOption.UseWH", project);
marker = getFirstMarker(CHECK_ID, id, project);
assertNull(marker);
id = getTopObjectIdByFqn("FunctionalOption.UseFinPlan", project);
marker = getFirstMarker(CHECK_ID, id, project);
assertNull(marker);
}
}

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>FunctionalOptionPrivilegedGetMode</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
<nature>com._1c.g5.v8.dt.core.V8ConfigurationNature</nature>
</natures>
</projectDescription>

View File

@ -0,0 +1,2 @@
eclipse.preferences.version=1
encoding/<project>=UTF-8

View File

@ -0,0 +1,2 @@
Manifest-Version: 1.0
Runtime-Version: 8.3.19

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<cmi:CommandInterface xmlns:cmi="http://g5.1c.ru/v8/dt/cmi"/>

View File

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Configuration xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="1b741952-6feb-4d71-86bc-e42c8829502c">
<name>FunctionalOptionPrivilegedGetMode</name>
<synonym>
<key>en</key>
<value>Functional option privileged get mode</value>
</synonym>
<containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="92e41153-3388-4488-9109-6ac2f2da2f85"/>
<containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="0e61eb98-13c9-4f17-8d8b-d7c3db1f1cf9"/>
<containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="5feda00b-2a34-4ef7-94c7-a42d2c1b3383"/>
<containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="1394d1c5-e816-4ebe-ad8e-0a9e7c010de0"/>
<containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="87d1c60c-d799-4f9e-a5c2-6fafb1ca5de6"/>
<containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="f12d9825-2e11-4907-9195-584011211b6c"/>
<containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="aea3f88c-6d77-42c3-a856-d730b30708c4"/>
<configurationExtensionCompatibilityMode>8.3.19</configurationExtensionCompatibilityMode>
<defaultRunMode>ManagedApplication</defaultRunMode>
<usePurposes>PersonalComputer</usePurposes>
<usedMobileApplicationFunctionalities>
<functionality>
<use>true</use>
</functionality>
<functionality>
<functionality>OSBackup</functionality>
<use>true</use>
</functionality>
</usedMobileApplicationFunctionalities>
<defaultLanguage>Language.English</defaultLanguage>
<dataLockControlMode>Managed</dataLockControlMode>
<objectAutonumerationMode>NotAutoFree</objectAutonumerationMode>
<modalityUseMode>DontUse</modalityUseMode>
<synchronousPlatformExtensionAndAddInCallUseMode>DontUse</synchronousPlatformExtensionAndAddInCallUseMode>
<compatibilityMode>8.3.19</compatibilityMode>
<languages uuid="ce819e23-56d0-46b5-a0d6-c1db9d31d2e1">
<name>English</name>
<synonym>
<key>en</key>
<value>English</value>
</synonym>
<languageCode>en</languageCode>
</languages>
<functionalOptions>FunctionalOption.UseOrganisations</functionalOptions>
<functionalOptions>FunctionalOption.UseWH</functionalOptions>
<functionalOptions>FunctionalOption.UseFinPlan</functionalOptions>
<constants>Constant.UseOrganisations</constants>
<constants>Constant.UseWH</constants>
</mdclass:Configuration>

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<cmi:CommandInterface xmlns:cmi="http://g5.1c.ru/v8/dt/cmi"/>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Constant xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="e07fba1f-19d5-4fff-9993-6299a77c042d">
<producedTypes>
<managerType typeId="d332705f-f367-40a0-aeb8-5208d89103ff" valueTypeId="4c54d407-778b-4bd8-813d-0787c7ea9161"/>
<valueManagerType typeId="34141bfe-6a5e-4814-88e8-ade8e4d7cad8" valueTypeId="24efdeb7-692d-47e3-b1fa-b254d9f99a6f"/>
<valueKeyType typeId="2e5657de-1309-41a1-9a61-60fe3ced7071" valueTypeId="69004c7f-769f-4a91-865c-1b55d614fd45"/>
</producedTypes>
<name>UseOrganisations</name>
<synonym>
<key>en</key>
<value>Use organisations</value>
</synonym>
<type>
<types>Boolean</types>
</type>
<useStandardCommands>true</useStandardCommands>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<dataLockControlMode>Managed</dataLockControlMode>
</mdclass:Constant>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Constant xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="d123187a-ac23-4b47-8e00-eaba44eda1f1">
<producedTypes>
<managerType typeId="97a35551-f2d4-454f-8b24-695a4d5148d9" valueTypeId="f84c9c7a-2647-47de-bd62-20189d4ec401"/>
<valueManagerType typeId="49cc1fcf-c475-4343-a5c4-03051b6e5c6a" valueTypeId="986ff5cb-4fe2-4d0d-9104-5f2b5f592ab3"/>
<valueKeyType typeId="80cca2c3-22e2-4caf-b89e-e7cf8ba38773" valueTypeId="22a98862-e390-4eb7-8c78-4763b0b5a2df"/>
</producedTypes>
<name>UseWH</name>
<synonym>
<key>en</key>
<value>Use WH</value>
</synonym>
<type>
<types>Boolean</types>
</type>
<useStandardCommands>true</useStandardCommands>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<dataLockControlMode>Managed</dataLockControlMode>
</mdclass:Constant>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:FunctionalOption xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="272e8a2f-16e7-4a38-9839-a996471ed1fb">
<name>UseFinPlan</name>
<synonym>
<key>en</key>
<value>Use fin plan</value>
</synonym>
</mdclass:FunctionalOption>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:FunctionalOption xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="0565c7e7-395c-45f0-9edd-74f86f5e4942">
<name>UseOrganisations</name>
<synonym>
<key>en</key>
<value>Use organisations</value>
</synonym>
<location>Constant.UseOrganisations</location>
</mdclass:FunctionalOption>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:FunctionalOption xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="06dc6e76-1d2f-4fe8-b6fe-c0e020f288ad">
<name>UseWH</name>
<synonym>
<key>en</key>
<value>Use WH</value>
</synonym>
<location>Constant.UseWH</location>
<privilegedGetMode>true</privilegedGetMode>
</mdclass:FunctionalOption>