Files
juzi/taobao/utils/permissions.js
T
xsl 9eec4369da feat(taobao): add native mini program with shared backend
Preserve H5 flows while adding Taobao identity, native capture, reports and isolated local development. Fix canceled province selection and expired-session logout. Record passing local regressions, two pre-existing H5 assertion failures and pending platform validation.
2026-10-19 20:14:31 +08:00

40 lines
2.0 KiB
JavaScript

// Taobao scopes are independent: userInfo login does not grant camera/album.
var denied = {};
function state(settings, scope) {
settings = settings || {};
var key = scope.replace(/^scope\./, '');
return typeof settings[scope] === 'boolean' ? settings[scope] : settings[key];
}
function settings() {
return new Promise(function (resolve) {
if (typeof my.getSetting !== 'function') { resolve({}); return; }
my.getSetting({ success: function (res) { resolve(res.authSetting || {}); }, fail: function () { resolve({}); } });
});
}
function rejected(scope) {
var err = new Error(scope === 'scope.camera' ? '相机权限未开启,可在授权设置中开启,或使用相册' : '相册权限未开启,请在授权设置中开启');
err.permission = scope; return err;
}
function ensure(scope) {
return settings().then(function (current) {
if (state(current, scope) === true) { delete denied[scope]; return; }
if (state(current, scope) === false || denied[scope]) throw rejected(scope);
return new Promise(function (resolve, reject) {
if (typeof my.authorize !== 'function') { reject(new Error('当前淘宝版本不支持授权,请升级后重试')); return; }
my.authorize({ scopes: scope, success: function () { delete denied[scope]; resolve(); },
fail: function () { denied[scope] = true; reject(rejected(scope)); } });
});
});
}
function open() {
return new Promise(function (resolve, reject) {
if (typeof my.openSetting !== 'function') { reject(new Error('请在小程序右上角的授权设置中开启权限')); return; }
my.openSetting({ success: function (res) {
var current = res.authSetting || {};
['scope.camera', 'scope.album'].forEach(function (scope) { if (state(current, scope) === true) delete denied[scope]; });
resolve(current);
}, fail: function () { reject(new Error('无法打开授权设置,请从小程序右上角进入')); } });
});
}
module.exports = { ensure: ensure, settings: settings, state: state, open: open };