public async Task <CommonMessage> Allow(
                string userId,
                string resource,
                string action,
                string _namespace,
                CancellationToken cancellationToken = default)
            {
                var param = new AllowParam(resource, action)
                {
                    UserId    = userId,
                    Resource  = resource,
                    Namespace = _namespace
                };
                var res = await client.Request <AllowResponse>(param.CreateRequest(), cancellationToken);

                return(res.Result);
            }
            /// <summary>
            /// 允许某个用户操作某个资源
            /// </summary>
            /// <param name="resource"></param>
            /// <param name="action"></param>
            /// <param name="userId"></param>
            /// <param name="role"></param>
            /// <param name="cancellationToken"></param>
            /// <returns></returns>
            /// TODO: 下个大版本去除
            /// WARNING: 去除 CancellationToken cancellationToken = default 参数以避免与重载函数冲突
            public async Task <CommonMessage> Allow(
                string resource,
                string action,
                string userId = null,
                string role   = null
                )
            {
                var param = new AllowParam(resource, action)
                {
                    UserId   = userId,
                    RoleCode = role,
                };
                await client.GetAccessToken();

                var res = await client.Request <AllowResponse>(param.CreateRequest());

                return(res.Result);
            }
            /// <summary>
            /// 允许某个用户操作某个资源
            /// </summary>
            /// <param name="resource"></param>
            /// <param name="action"></param>
            /// <param name="userId"></param>
            /// <param name="role"></param>
            /// <param name="cancellationToken"></param>
            /// <returns></returns>
            public async Task <CommonMessage> Allow(
                string resource,
                string action,
                string userId = null,
                string role   = null,
                CancellationToken cancellationToken = default)
            {
                var param = new AllowParam()
                {
                    Resource = resource,
                    Action   = action,
                    UserId   = userId,
                    RoleCode = role,
                };
                await client.GetAccessToken();

                var res = await client.Request <AllowResponse>(param.CreateRequest(), cancellationToken);

                return(res.Result);
            }
        public override ExitCode Execute()
        {
            // Get the base directory
            DirectoryReference BaseDir = new DirectoryReference(ParseParamValue("BaseDir"));

            if (!DirectoryReference.Exists(BaseDir))
            {
                throw new AutomationException("Base directory '{0}' does not exist", BaseDir);
            }

            // Find a list of restricted folders, and remove any names which are explicitly whitelisted
            HashSet <string> RestrictedNames = new HashSet <string>(PlatformExports.RestrictedFolderNames.Select(x => x.DisplayName), StringComparer.InvariantCultureIgnoreCase);

            foreach (string AllowParam in ParseParamValues("Allow"))
            {
                RestrictedNames.ExceptWith(AllowParam.Split('+'));
            }

            // Find all the folders which are problematic
            CommandUtils.Log("Searching for folders under {0} named {1}...", BaseDir, String.Join(", ", RestrictedNames));
            List <DirectoryInfo> ProblemFolders = new List <DirectoryInfo>();

            FindRestrictedFolders(new DirectoryInfo(BaseDir.FullName), RestrictedNames, ProblemFolders);

            // Print out all the restricted folders
            if (ProblemFolders.Count > 0)
            {
                CommandUtils.LogError("Found {0} {1} which should not be distributed:", ProblemFolders.Count, (ProblemFolders.Count == 1) ? "folder" : "folders");
                foreach (DirectoryInfo ProblemFolder in ProblemFolders)
                {
                    CommandUtils.LogError("    {0}{1}...", new DirectoryReference(ProblemFolder).MakeRelativeTo(BaseDir), Path.DirectorySeparatorChar);
                }
                return(ExitCode.Error_Unknown);
            }

            // Otherwise return success
            CommandUtils.Log("No restricted folders found under {0}", BaseDir);
            return(ExitCode.Success);
        }