anchor.diff:  -type ct_config() :: proplists:proplist().
   -type perms_test_spec() :: #perms_test_spec{}.
   
  +-type perms_per_file() :: #{file_id:file_guid() => [FilePerm :: binary()]}.
  +
   -record(scenario_ctx, {
       meta_spec :: perms_test_spec(),
       scenario_name :: binary(),
       scenario_root_dir_path :: file_meta:path(),
       required_space_privs = [] :: owner | [privileges:space_privilege()],
  -    required_perms_per_file = #{} :: #{file_id:file_guid() => [FilePerm :: binary()]},
  +    required_perms_per_file = #{} :: perms_per_file(),
       extra_data :: map()
   }).
   -type scenario_ctx() :: #scenario_ctx{}.
  
positive.code:     ]).
  
  
  run_acl_perms_scenario(
      Node, FileOwnerSessId, SessId, TestCaseRootDirPath, ScenarioName,
      ComplementaryPermsPerFile, AllRequiredPerms, ExtraData, AceWho, AceFlags, allow,
      #perms_test_spec{operation = Operation} = TestSpec
  ) ->
      [AllRequiredPermsComb | EaccesPermsCombs] = combinations(AllRequiredPerms),
  
      % Granting all perms without required ones should result in {error, ?EACCES}
  
negative.code:         ),
          ?assertMatchWithPerms(
              {error, ?EACCES},
              Operation(ExecutionerSessId, ScenarioRootDirPath, ExtraData),
              ScenarioName,
              EaccesPermsPerFile
          )
  