== Why is this an issue? Checking logged users' permissions by comparing their name to a hardcoded string can create security vulnerabilities. It prevents system administrators from changing users' permissions when needed (example: when their account has been compromised). Thus system fields ``++SY-UNAME++`` and ``++SYST-UNAME++`` should not be compared to hardcoded strings. Use instead ``++AUTHORITY-CHECK++`` to check users' permissions. This rule raises an issue when either of the system fields ``++SY-UNAME++`` or ``++SYST-UNAME++`` are compared to a hardcoded value in a ``++CASE++`` statement or using one of the following operators: ``++=++``, ``++EQ++``, ``++<>++``, ``++NE++``. === Noncompliant code example [source,abap] ---- IF SY-UNAME = 'ALICE'. " Noncompliant ENDIF. CASE SY-UNAME. WHEN 'A'. " Noncompliant ENDCASE. ---- === Compliant solution [source,abap] ---- AUTHORITY-CHECK OBJECT 'S_CARRID' ID 'CARRID' FIELD mycarrid. IF sy-subrc <> 0. MESSAGE 'Not authorized' TYPE 'E'. ENDIF. ---- ifdef::env-github,rspecator-view[] ''' == Implementation Specification (visible only on this page) === Message Replace this hard-coded comparison of "SY-UNAME" with an "AUTHORITY-CHECK". Replace this hard-coded comparison of "SYST-UNAME" with an "AUTHORITY-CHECK". ''' == Comments And Links (visible only on this page) === on 20 Dec 2018, 15:53:00 Nicolas Harraudeau wrote: For now this rule exists only for ABAP but this is a common mistake in many programming languages. ACL libraries should be preferred to hardcoded reference to a specific user. endif::env-github,rspecator-view[]