summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlapinskijw <jlapinski.dev@gmail.com>2020-06-10 15:21:09 -0400
committerlapinskijw <jlapinski.dev@gmail.com>2020-06-10 15:21:09 -0400
commit30b6e0d6e35d1509d9281efa412d5cd6c3caf32c (patch)
treeb53e4c7ac2065bdc4b47fdb31ec10befa1b7ea90
parentef12e261638cfda8852303e3570a3905d29cef3e (diff)
downloadsdl_ios-30b6e0d6e35d1509d9281efa412d5cd6c3caf32c.tar.gz
added method to permission manager to check for parameter permissions
-rw-r--r--SmartDeviceLink/SDLPermissionManager.h11
-rw-r--r--SmartDeviceLink/SDLPermissionManager.m17
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