仅要求标准帐户的管理员权限
Asking for admin privileges for only standard accounts
我正在通过我的应用程序将一些文件移动到 /Applications 目录,并使用 SMJobBless() 提升到管理员权限。
但是它会提示任何类型的帐户的管理员凭据 - admin 或 standard_user,我们可以检查一下并通过使用任何 objective-c [=20 来仅要求标准用户提供管理员凭据吗? =]?
Edit -- 如果有人尝试或经历过安装 Dropbox 的过程,那么 Dropbox 安装程序会做同样的事情(即它只要求标准帐户的管理员权限来复制它.app 文件到 /Applications)。
根据另一个问题的答案,我制作了一个似乎适合你的文件(我刚刚将它从 C 翻译成 Objective-C 并删除了 printf;原来的 link在答案的末尾)。
NSPrivileges.h
#import <Foundation/Foundation.h>
@interface NSPrivileges : NSObject
+(BOOL)hasAdminPrivileges;
@end
NSPrivileges.m
#import "NSPrivileges.h"
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <strings.h>
#include <pwd.h>
#include <grp.h>
@implementation NSPrivileges
+(BOOL)hasAdminPrivileges{
uid_t current_user_id = getuid();
struct passwd *pwentry = getpwuid(current_user_id);
struct group *grentry = getgrgid(getgid());
struct group *admin_group = getgrnam("admin");
while(*admin_group->gr_mem != NULL) {
if (strcmp(pwentry->pw_name, *admin_group->gr_mem) == 0) {
return YES;
}
admin_group->gr_mem++;
}
return NO;
}
@end
现在,你只需要将 NSPrivileges.h 导入到需要知道用户是否是管理员的文件中,然后使用命令 [NSPrivileges hasAdminPrivileges]
来查找(它将 return一个BOOL
,这样会好办)。希望对你有帮助。
这是我的参考资料:
Objective C and OS user type
我正在通过我的应用程序将一些文件移动到 /Applications 目录,并使用 SMJobBless() 提升到管理员权限。
但是它会提示任何类型的帐户的管理员凭据 - admin 或 standard_user,我们可以检查一下并通过使用任何 objective-c [=20 来仅要求标准用户提供管理员凭据吗? =]?
Edit -- 如果有人尝试或经历过安装 Dropbox 的过程,那么 Dropbox 安装程序会做同样的事情(即它只要求标准帐户的管理员权限来复制它.app 文件到 /Applications)。
根据另一个问题的答案,我制作了一个似乎适合你的文件(我刚刚将它从 C 翻译成 Objective-C 并删除了 printf;原来的 link在答案的末尾)。
NSPrivileges.h
#import <Foundation/Foundation.h>
@interface NSPrivileges : NSObject
+(BOOL)hasAdminPrivileges;
@end
NSPrivileges.m
#import "NSPrivileges.h"
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <strings.h>
#include <pwd.h>
#include <grp.h>
@implementation NSPrivileges
+(BOOL)hasAdminPrivileges{
uid_t current_user_id = getuid();
struct passwd *pwentry = getpwuid(current_user_id);
struct group *grentry = getgrgid(getgid());
struct group *admin_group = getgrnam("admin");
while(*admin_group->gr_mem != NULL) {
if (strcmp(pwentry->pw_name, *admin_group->gr_mem) == 0) {
return YES;
}
admin_group->gr_mem++;
}
return NO;
}
@end
现在,你只需要将 NSPrivileges.h 导入到需要知道用户是否是管理员的文件中,然后使用命令 [NSPrivileges hasAdminPrivileges]
来查找(它将 return一个BOOL
,这样会好办)。希望对你有帮助。
这是我的参考资料: Objective C and OS user type