通過蘋果BetterAuthorizationSample,並進一步衍生品(http://www.stevestreeting.com/2011/11/25/escalating-privileges-on-mac-os-x-securely-and-without-using-deprecated-methods/) 我試圖做一個小變化的應用和更好地瞭解整個安全& ServiceManagement框架的展望。因此我開始添加一個按鈕,通過SMJobBless - SMJobRemove()的反轉刪除已安裝的Job。簡單的說,AuthorizationCreate()調用會顯示一個對話框,指出並請求安裝助手的權限而不是刪除它。更改授權對話框
這就是我得到的對話框(通過使用kSMRightModifySystemDaemons
)。正如你可以看到它說我的應用程序試圖添加一個新的幫助工具。這會混淆我的用戶,因爲應用程序實際上試圖刪除已安裝的幫助工具。
我正在尋找找到這個對話框是如何改變以反映我的實際行動(工作拆卸)知識,也有其他幾個這似乎完全自主的對話框中的應用程序 - 顯示自己的自定義標籤和按鈕..
BOOL doRemoveSystemTool(NSString* label, NSError** error)
{
BOOL result = NO;
AuthorizationItem authItem = { kSMRightModifySystemDaemons, 0, NULL, 0 };
AuthorizationRights authRights = { 1, &authItem };
AuthorizationFlags flags = kAuthorizationFlagDefaults |
kAuthorizationFlagInteractionAllowed |
kAuthorizationFlagPreAuthorize |
kAuthorizationFlagExtendRights;
AuthorizationRef authRef = NULL;
//Obtain authorization
OSStatus status = AuthorizationCreate(&authRights, kAuthorizationEmptyEnvironment, flags, &authRef);
if (status != errAuthorizationSuccess)
{
NSLog(@"Failed to create AuthorizationRef, return code %ld", (long)status);
} else
{
//We have authorization so proceed with removing the Job via SMJobRemove
result = SMJobRemove(kSMDomainSystemLaunchd, (CFStringRef)label, authRef, YES, (CFErrorRef *)error);
}
AuthorizationFree(authRef, kAuthorizationFlagDefaults);
return result;
}
我已經與authItem改變爲kSMRightModifySystemDaemons從kSMRightBlessPrivilegedHelper但是這一切都沒有嘗試改變是要顯示「添加」,而不是「安裝」
對話將不勝感激這裏的一些援助...
解決方案是使用AuthorizationRightSet()來創建一個新的權集,其中最後一個參數(localeTableName)指定默認的提示,仍然不確定究竟如何得到它拿起默認按鈕上的文字,但至少標籤可以很容易地更改 – DavidMIRV
如果你可以解釋我如何使用'AuthorizationRightSet()'把更多的意義放入對話框中,我會很樂意獎勵賞金;-) –
Apple在這裏有一個例子:https://developer.apple.com /library/mac/technotes/tn2095/_index.html#//apple_ref/doc/uid/DTS10003110-CH1-SECTION7。以編程方式添加權限「當您使用非NULL descriptionKey調用AuthorizationRightSet時,它將遍歷包中的每個本地化對於每個本地化,它會查找適當的本地化表文件,然後在該表中查找描述碼。增加所產生的字符串在正確規範的默認提示字典。「 – markhunte