コード例 #1
0
        public async Task<IActionResult> AddScopeClaim(NewScopeClaimViewModel scopeModel)
        {
            if (!ModelState.IsValid)
            {
                return RedirectToAction("EditScope", new { siteId = scopeModel.SiteId, scopeName = scopeModel.ScopeName });
            }

            Guid siteId = siteManager.CurrentSite.Id;
            if (!string.IsNullOrEmpty(scopeModel.SiteId) && scopeModel.SiteId.Length == 36)
            {
                siteId = new Guid(scopeModel.SiteId);
            }
            var selectedSite = await siteManager.GetSiteForDataOperations(siteId);

            var scope = await scopesManager.FetchScope(selectedSite.Id.ToString(), scopeModel.ScopeName);
            if(scope == null)
            {
                this.AlertDanger(sr["Invalid request, scope not found."], true);
                return RedirectToAction("Index");
            }

            var claim = new ScopeClaim(scopeModel.Name, scopeModel.AlwaysIncludeInIdToken);
            claim.Description = scopeModel.Description;

            if(scope.Claims.Contains(claim))
            {
                this.AlertDanger(sr["Scope already has a claim with that name."], true);
                return RedirectToAction("EditScope", new { siteId = selectedSite.Id.ToString(), scopeName = scopeModel.ScopeName });
            }
            scope.Claims.Add(claim);

            await scopesManager.UpdateScope(selectedSite.Id.ToString(), scope);

            var successFormat = sr["The Claim <b>{0}</b> was successfully added."];

            this.AlertSuccess(string.Format(successFormat, claim.Name), true);

            return RedirectToAction("EditScope", new { siteId = selectedSite.Id.ToString(), scopeName = scopeModel.ScopeName });
        }