• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 管理域账号(仅对系统应用开放)
2
3<!--Kit: Basic Services Kit-->
4<!--Subsystem: Account-->
5<!--Owner: @steven-q-->
6<!--Designer: @JiDong-CS1-->
7<!--Tester: @zhaimengchao-->
8<!--Adviser: @zengyawen-->
9
10用户可以在系统中添加域账号,后续可以域账号身份登录、使用系统。
11
12## 开发准备
13
141. 申请权限,申请流程请参考:[申请应用权限](../../security/AccessToken/determine-application-mode.md#system_basic等级应用申请权限的方式)。
15   - ohos.permission.MANAGE_LOCAL_ACCOUNTS
16   - ohos.permission.GET_DOMAIN_ACCOUNTS
17
182. 导入系统账号模块。
19
20   ```ts
21   import { osAccount, BusinessError } from '@kit.BasicServicesKit';
22   ```
23
243. 获取系统账号管理对象。
25
26   ```ts
27   let osAccountMgr = osAccount.getAccountManager();
28   ```
29
30## 判断指定域账号是否存在
31
32在添加域账号之前,应该先判断域账号是否存在。开发者可以使用[hasAccount](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#hasaccount10)接口进行判断。
33
34具体开发实例如下:
35
361. 定义待判断的域账号信息。
37
38   ```ts
39   let domainAccountInfo: osAccount.DomainAccountInfo = {
40     accountName: 'testAccountName',
41     domain: 'testDomain'
42   }
43   ```
44
452. 调用[hasAccount](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#hasaccount10)接口。
46
47   ```ts
48   osAccount.DomainAccountManager.hasAccount(domainAccountInfo).then((isAccountExisted: boolean)=>{
49     console.info('execute hasAccount successfully, isAccountExisted:' + JSON.stringify(isAccountExisted));
50   }).catch((err: BusinessError)=>{
51     console.error(`execute hasAccount code is ${err.code}, message is ${err.message}`);
52   });
53   ```
54
55## 添加域账号
56
57用户在设置中添加其他域账号,允许其他域账号用户使用同一设备。开发者可以使用[createOsAccountForDomain](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#createosaccountfordomain8)完成此操作。
58
59具体开发实例如下:
60
611. 定义域账号信息,指定域名、账号名、账号标识(可选)。
62
63   ```ts
64   let domainInfo: osAccount.DomainAccountInfo = {
65     domain: 'testDomain',
66     accountName: 'testAccountName'
67   };
68   ```
69
702. 指定类型和域账号信息,调用[createOsAccountForDomain](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#createosaccountfordomain8)接口在设备上创建一个域账号。
71
72   ```ts
73   try {
74     osAccountMgr.createOsAccountForDomain(osAccount.OsAccountType.NORMAL, domainInfo,
75     (err: BusinessError, osAccountInfo: osAccount.OsAccountInfo)=>{
76       if (err) {
77        console.error(`createOsAccountForDomain exception:code is ${err.code}, message is ${err.message}`);
78      } else {
79        console.info('createOsAccountForDomain osAccountInfo:' + JSON.stringify(osAccountInfo));
80      }
81   });
82   } catch (e) {
83   console.error(`createOsAccountForDomain exception: code is ${e.code}, message is ${e.message}`);
84   }
85   ```
86
87## 删除域账号
88
89用户可以删除不再使用的域账号。由于域账号和系统账号是一一绑定关系,开发者可以使用[removeOsAccount](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#removeosaccount)接口删除与目标域账号绑定的系统账号,进而实现删除域账号。
90
91具体开发实例如下:
92
931. 调用[getOsAccountLocalIdForDomain](../../reference/apis-basic-services-kit/js-apis-osAccount.md#getosaccountlocalidfordomain9)方法,根据域账号信息获取系统账号ID。
94
95   ```ts
96   let domainInfo: osAccount.DomainAccountInfo = {
97       domain: 'testDomain',
98       accountName: 'testAccountName'
99   };
100   let localId: number = 0;
101
102   try {
103     localId = await osAccountMgr.getOsAccountLocalIdForDomain(domainInfo);
104   } catch (err) {
105     console.error(`getOsAccountLocalIdForDomain exception: code is ${err.code}, message is ${err.message}`);
106   }
107   ```
108
1092. 调用[removeOsAccount](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#removeosaccount)方法删除域账号。
110
111   ```ts
112   try {
113     osAccountMgr.removeOsAccount(localId, (err: BusinessError)=>{
114       if (err) {
115           console.error(`removeOsAccount failed, code is ${err.code}, message is ${err.message}`);
116       } else {
117           console.info('removeOsAccount successfully');
118       }
119     });
120   } catch (err) {
121     console.error(`removeOsAccount exception: code is ${err.code}, message is ${err.message}`);
122   }
123   ```
124
125## 查询域账号信息
126
127用户通过身份认证后,可以查询自己或他人的域账号信息。开发者可以使用[getAccountInfo](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#getaccountinfo10)接口完成此操作。
128
129具体开发实例如下:
130
1311. 定义查询选项,可以指定需要查询的域名和账号名。选项的类型为[GetDomainAccountInfoOptions](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#getdomainaccountinfooptions10)。
132
133   ```ts
134   let options: osAccount.GetDomainAccountInfoOptions = {
135       domain: 'testDomain',
136       accountName: 'testAccountName'
137   }
138   ```
139
1402. 调用[getAccountInfo](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#getaccountinfo10)接口查询域账号信息。
141
142   ```ts
143   try {
144     osAccount.DomainAccountManager.getAccountInfo(options,
145       (err: BusinessError, result: osAccount.DomainAccountInfo) => {
146       if (err) {
147           console.error(`call getAccountInfo failed, code is ${err.code}, message is ${err.message}`);
148       } else {
149           console.info('getAccountInfo result: ' + result);
150       }
151     });
152   } catch (err) {
153       console.error(`getAccountInfo exception = code is ${err.code}, message is ${err.message}`);
154   }
155   ```
156