Будьте осторожны при использовании AuthorizationCreate
Q: Он возможный использовать AuthorizationCreate создать AuthorizationRef, и одновременно, расширьте в настоящее время авторизованные права, все на одном шаге?
A: Да, это возможно, но необходимо быть осторожными. Если запрос на авторизацию отклонен, или сбои авторизации по некоторой другой причине, AuthorizationRef фактически не становится создаваемым, так использование его в последующих вызовах перестанет работать.
Лучший подход должен использовать AuthorizationCreate и передача NULL как начальная буква AuthorizationRights набор так, чтобы AuthorizationRef создается успешно, и затем более поздний вызов AuthorizationCopyRights определить или расширить допустимые права. Перечисление 1 иллюстрирует это.
Перечисление 1 Рекомендуемый способ использовать AuthorizationCreate.
OSStatus status;
AuthorizationRef authorizationRef;
AuthorizationItem right = { "com.mycompany.myapplication.command1", 0, NULL, 0 };
AuthorizationRights rightSet = { 1, &right };AuthorizationFlags flags =
kAuthorizationFlagExtendRights |
kAuthorizationFlagInteractionAllowed;
/* Create a new AuthorizationRef object, but pass in NULL for the
AuthorizationRights set so the AuthorizationRef can be used in future calls. */
status = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment,
kAuthorizationFlagDefaults, &authorizationRef);
if (status == errAuthorizationSuccess)
{
/* Now we can use the AuthorizationRef to deterimine if the user is
allowed to perform the rights contained in "rightSet". */
status = AuthorizationCopyRights(authorizationRef, &rightSet,
kAuthorizationEmptyEnvironment, flags, NULL);
} |
История версии документа
| Дата | Примечания |
|---|---|
| 26.07.2011 | Переформатированное содержание и внесло незначительные редакционные изменения. |
| 20.09.2002 | Новый документ, объясняющий, почему необходимо избежать определять допустимые права при создании AuthorizationRef. |