高度な検索
Developer Connection
Member Login ログイン | ご入会 ADC連絡先

Technical Q&A QA1172
Be careful when using AuthorizationCreate


Q: AuthorizationCreate を使って AuthorizationRef を作成し、同時に現在許可されている権限を拡大するという操作を、1 つのステップで実行できますか?

A: できます。ただし慎重に行う必要があります。権限の要求が拒否されたり、何らかの理由で認証に失敗したりすると、実際には AuthorizationRef が作成されないなめ、その後の呼び出しで AuthorizationRef を使うと失敗します。

もっとよい方法は、AuthorizationCreate を使うときに AuthorizationRights の初期設定として NULL を渡し、AuthorizationRef が正常に作成されるようにします。その後、AuthorizationCopyRights を呼び出して可能な権限を決定または拡大します。

 

OSStatus status;
AuthorizationRef authorizationRef;
AuthorizationItem right = { "com.mycompany.myapplication.command1", 0, NULL, 0 };
AuthorizationRights rightSet = { 1, &right };
AuthorizationFlags flags = kAuthorizationFlagExtendRights | kAuthorizationFlagInteractionAllowed;

/* 新規の AuthorizationRef オブジェクトを作成するが、AuthorizationRights の設定として NULL を渡し、AuthorizationRef をその後の呼び出しでも使 えるようにする */ status = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, kAuthorizationFlagDefaults, &authorizationRef);

if (status == errAuthorizationSuccess) { /* AuthorizationRef を使って、ユーザが“rightSet”にある権限の実行が 許可されるかどうかを判断できる */ status = AuthorizationCopyRights(authorizationRef, &rightSet, kAuthorizationEmptyEnvironment, flags, NULL); }

リスト 1. 推奨される AuthorizationCreate の使用方法

 

[2002 年 9 月 20 日]