diff options
author | lapinskijw <jlapinski.dev@gmail.com> | 2020-06-10 15:21:09 -0400 |
---|---|---|
committer | lapinskijw <jlapinski.dev@gmail.com> | 2020-06-10 15:21:09 -0400 |
commit | 30b6e0d6e35d1509d9281efa412d5cd6c3caf32c (patch) | |
tree | b53e4c7ac2065bdc4b47fdb31ec10befa1b7ea90 | |
parent | ef12e261638cfda8852303e3570a3905d29cef3e (diff) | |
download | sdl_ios-30b6e0d6e35d1509d9281efa412d5cd6c3caf32c.tar.gz |
added method to permission manager to check for parameter permissions
-rw-r--r-- | SmartDeviceLink/SDLPermissionManager.h | 11 | ||||
-rw-r--r-- | SmartDeviceLink/SDLPermissionManager.m | 17 |
2 files changed, 28 insertions, 0 deletions
diff --git a/SmartDeviceLink/SDLPermissionManager.h b/SmartDeviceLink/SDLPermissionManager.h index 6adfa7cf7..d3a4e9c8b 100644 --- a/SmartDeviceLink/SDLPermissionManager.h +++ b/SmartDeviceLink/SDLPermissionManager.h @@ -10,6 +10,7 @@ #import "SDLHMILevel.h" #import "SDLPermissionConstants.h" +#import "SDLRPCFunctionNames.h" @class SDLPermissionItem; @class SDLRPCMessage; @@ -96,6 +97,16 @@ NS_ASSUME_NONNULL_BEGIN */ - (BOOL)rpcRequiresEncryption:(SDLPermissionRPCName)rpcName; + +/** + * Check whether a parameter of an RPC is allowed + * + * @param rpcName The name of the RPC to be tested, for example, SDLRPCFunctionNameGetVehicleData + * + * @param parameter The name of the parameter to be tested, for example, rpm + */ +- (BOOL)isPermissionParameterAllowed:(SDLRPCFunctionName)rpcName parameter:(NSString*)parameter; + @end NS_ASSUME_NONNULL_END diff --git a/SmartDeviceLink/SDLPermissionManager.m b/SmartDeviceLink/SDLPermissionManager.m index cdb08e135..886ff07e1 100644 --- a/SmartDeviceLink/SDLPermissionManager.m +++ b/SmartDeviceLink/SDLPermissionManager.m @@ -12,6 +12,7 @@ #import "SDLNotificationConstants.h" #import "SDLOnHMIStatus.h" #import "SDLOnPermissionsChange.h" +#import "SDLParameterPermissions.h" #import "SDLPermissionFilter.h" #import "SDLPermissionItem.h" #import "SDLPredefinedWindows.h" @@ -374,6 +375,22 @@ NS_ASSUME_NONNULL_BEGIN return NO; } +- (BOOL)isPermissionParameterAllowed:(SDLRPCFunctionName)rpcName parameter:(NSString *)parameter { + return [self isPermissionParameterAllowed:rpcName parameter:parameter permissionItems:self.permissions hmiLevel:self.currentHMILevel]; +} + +- (BOOL)isPermissionParameterAllowed:(SDLRPCFunctionName)rpcName parameter:(NSString *)parameter permissionItems:(NSMutableDictionary<SDLPermissionRPCName, SDLPermissionItem *> *)permissionItems hmiLevel:(SDLHMILevel)hmiLevel { + + SDLPermissionItem *permissionItem = permissionItems[rpcName]; + if (permissionItem == nil || ![self isRPCAllowed:rpcName] || permissionItem.parameterPermissions == nil || permissionItem.parameterPermissions.allowed == nil) { + return NO; + } else if (permissionItem.parameterPermissions.userDisallowed != nil) { + return [permissionItem.parameterPermissions.allowed containsObject:parameter] && ![permissionItem.parameterPermissions.userDisallowed containsObject:parameter]; + } else { + return [permissionItem.parameterPermissions.allowed containsObject:parameter]; + } +} + @end NS_ASSUME_NONNULL_END |