コード例 #1
0
        public IEnumerable <PermissionGrant> GetByPrincipalAndSchema(CPN principal, CSN schema)
        {
            var principalStr   = principal?.ToString();
            var schemaStr      = schema?.ToString();
            var foundPrincipal = this.context.Principals.FirstOrDefault(p => p.CanonicalName == principalStr);
            var foundSchema    = this.context.Schemas.FirstOrDefault(s => s.CanonicalName == schemaStr);

            if (foundPrincipal == null)
            {
                return(new List <PermissionGrant>());
            }
            var query = GetQuery();
            Func <Persistance.Models.PermissionGrant, bool> filter;

            if (foundSchema != null)
            {
                filter = (g) => g.PrincipalId == foundPrincipal.PrincipalId && g.SchemaId == foundSchema.SchemaId;
            }
            else
            {
                filter = g => g.PrincipalId == foundPrincipal.PrincipalId;
            }

            return(query.Where(filter).ToList().Select(ToModel));
        }
コード例 #2
0
        public IEnumerable <Principal> FindParents(CPN principal)
        {
            if (principal.IncludesWildcard)
            {
                throw new ArgumentException("Parentage search for principal cannot include wildcards");
            }

            var found = GetQuery().FirstOrDefault(p => p.CanonicalName == principal.Value);

            if (found == null)
            {
                return(new List <Principal>());
            }

            var parents = new List <Principal>();

            Persistance.Models.PrincipalRelation link = null;

            do
            {
                link = this.context.PrincipalRelations
                       .Include(r => r.Parent)
                       .FirstOrDefault(r => r.ChildPrincipalId == found.PrincipalId);

                if (link == null)
                {
                    continue;
                }

                parents.Add(ToModel(link.Parent));
                found = link.Parent;
            } while (link != null);

            return(parents);
        }
コード例 #3
0
        public void Revoke(CRN resource, CPN principal, CSN schema = null)
        {
            var found = this.storage.FindBy(it =>
                                            it.Principal == principal &&
                                            it.Resources.Any(r =>
            {
                if (resource.IncludesWildcard)
                {
                    return(resource.IsWildcardMatch(r.Identifier));
                }
                return(r.Identifier == resource);
            }));

            if (schema != default(CSN))
            {
                found = found.Where(f => f.Resources.Any(r => r.Schema == schema));
            }

            var keys = found.Select(f => f.GetHash());

            foreach (var k in keys)
            {
                this.storage.Remove(k);
            }
        }
コード例 #4
0
        private IEnumerable <Principal> FindByWildcard(CPN principal)
        {
            var all = GetQuery().ToList();

            return(all
                   .Where(p => principal.IsWildcardMatch(CPN.FromValue(p.CanonicalName)))
                   .Select(ToModel));
        }
コード例 #5
0
 public IEnumerable <DataProvider> All()
 {
     return(this.context.DataProviders.Include(p => p.Principal).ToList().Select(p => new DataProvider()
     {
         Principal = CPN.FromValue(p.Principal.CanonicalName),
         Identifier = CRN.FromValue(p.CanonicalName),
         Name = p.Name
     }));
 }
コード例 #6
0
 private Principal ToModel(Persistance.Models.Principal entity)
 {
     if (entity == null)
     {
         return(null);
     }
     return(Principal.From(CPN.FromValue(entity.CanonicalName))
            .WithChildren(entity.ChildRelations.Select(r => CPN.FromValue(r.Child.CanonicalName)).ToArray()));
 }
コード例 #7
0
        public IEnumerable <Principal> Find(CPN principal)
        {
            if (principal.IncludesWildcard)
            {
                return(this.storage.Where(p => principal.IsWildcardMatch(p.Identifier)));
            }

            return(this.storage.Where(p => p.Identifier == principal));
        }
コード例 #8
0
        public void Remove(CPN principal)
        {
            var found = this.context.Principals.FirstOrDefault(p => p.CanonicalName == principal.Value);

            if (found == null)
            {
                return;
            }
            this.context.Principals.Remove(found);
            this.context.SaveChanges();
        }
コード例 #9
0
        public bool AddRelation(CPN parent, CPN child)
        {
            var found = this.storage.FirstOrDefault(p => p.Identifier == parent);

            if (found == null)
            {
                return(false);
            }
            found.Children.Add(child);
            return(true);
        }
コード例 #10
0
 private PermissionGrant ToModel(Persistance.Models.PermissionGrant entity)
 {
     return(new PermissionGrant()
     {
         Id = entity.PermissionGrantId,
         Principal = CPN.FromValue(entity.Principal.CanonicalName),
         Schema = CSN.FromValue(entity.Schema.CanonicalName),
         Actions = entity.Actions.Select(a => ResourceAction.FromValue(a.Action.CanonicalName)).ToList(),
         Resource = entity.Resources.Select(r => CRN.FromValue(r.Resource.CanonicalName)).ToList()
     });
 }
コード例 #11
0
 public IEnumerable <Principal> Find(CPN principal)
 {
     if (principal.IncludesWildcard)
     {
         return(FindByWildcard(principal));
     }
     return(GetQuery()
            .Where(p => p.CanonicalName == principal.Value)
            .ToList()
            .Select(ToModel));
 }
コード例 #12
0
        public bool AddRelation(CPN parent, CPN child)
        {
            var found = this.context.Principals.FirstOrDefault(p => p.CanonicalName == parent.Value);

            if (found == null)
            {
                return(false);
            }
            AddRelation(found, child);
            this.context.SaveChanges();
            return(true);
        }
コード例 #13
0
        private void AddRelation(Persistance.Models.Principal parent, CPN child)
        {
            var found = this.context.Principals.FirstOrDefault(p => p.CanonicalName == child.Value);

            if (found == null)
            {
                return;
            }
            this.context.Add(new Persistance.Models.PrincipalRelation()
            {
                Parent = parent,
                Child  = found
            });
        }
コード例 #14
0
        public IActionResult AddRelation([FromRoute] string id, [FromBody] string relation)
        {
            var parent = CPN.FromValue(id);
            var found  = this.storage.Find(parent).FirstOrDefault();

            if (found == null)
            {
                return(NotFound());
            }

            var child = CPN.FromValue(relation);

            if (!this.storage.AddRelation(parent, child))
            {
                return(NoContent());
            }

            return(Created(Url.RouteUrl(new { controller = "Principal", action = "Get", id = found.Id }), found));
        }
コード例 #15
0
        public IActionResult Get([FromRoute] string principal, [FromQuery] string schema = null)
        {
            IEnumerable <PermissionGrant> results;
            var principalRn = CPN.FromValue(HttpUtility.UrlDecode(principal));

            if (schema == null)
            {
                results = this.grantFinder.Find(principalRn);
            }
            else
            {
                var schemaRn = CSN.FromValue(HttpUtility.UrlDecode(schema));
                results = this.grantFinder.Find(principalRn, schemaRn);
            }

            if (!results.Any())
            {
                return(NotFound());
            }
            return(Ok(results));
        }
コード例 #16
0
 public IEnumerable <DataProviderPolicy> GetPoliciesForSchema(CSN schema)
 {
     return(this.context.DataProviderPolicies
            .Include(p => p.Provider)
            .Include(p => p.Schema)
            .Include(p => p.PolicyItems)
            .ThenInclude(i => i.Principal)
            .Where(p => p.Schema.CanonicalName == schema.ToString())
            .ToList()
            .Select(p => new DataProviderPolicy()
     {
         Provider = CRN.FromValue(p.Provider.CanonicalName),
         Schema = CSN.FromValue(p.Schema.CanonicalName),
         Rule = p.PolicyItems.Select(i => new DataProviderPolicyRule()
         {
             Principal = CPN.FromValue(i.Principal.CanonicalName),
             Allow = i.Allow,
             Deny = i.Deny
         }).ToList()
     }));
 }
コード例 #17
0
        public IEnumerable <Principal> FindParents(CPN principal)
        {
            var       parents = new List <Principal>();
            Principal found   = this.storage.FirstOrDefault(p => p.Identifier == principal);

            if (found == null)
            {
                return(parents);
            }

            do
            {
                found = this.storage.FirstOrDefault(p => p.Children.Contains(found.Identifier));
                if (found == null)
                {
                    continue;
                }
                parents.Add(found);
            } while (found != null);

            return(parents);
        }
コード例 #18
0
 public PermissionTicket ForPrincipal(CPN identity)
 {
     Principal = identity;
     return(this);
 }
コード例 #19
0
 public IEnumerable <PermissionGrant> GetByPrincipalAndSchema(CPN principal, CSN schema) =>
 this.grants.Where(g => g.Principal == principal && g.Schema == schema);
コード例 #20
0
 public IEnumerable <PermissionGrant> GetByPrincipal(CPN principal) =>
 this.grants.Where(g => g.Principal == principal);
コード例 #21
0
 public DataProvider ForPrincipal(CPN principal)
 {
     Principal = principal;
     return(this);
 }
コード例 #22
0
 public IEnumerable <PermissionGrant> Find(CPN principal) => this.storage.GetByPrincipal(principal);
コード例 #23
0
 public IEnumerable <PermissionGrant> Find(CPN principal, CSN schema) =>
 this.storage.GetByPrincipalAndSchema(principal, schema);
コード例 #24
0
 public static DataProviderPolicyRule ForPrincipal(CPN principal) => new DataProviderPolicyRule()
 {
     Principal = principal
 };
コード例 #25
0
 private void UpdateFoundPrimeNumberList(Object Obj, EventArgs e)
 {
     this.Dispatcher.Invoke(() =>
     {
         if (ConfirmedPrimeNumbers.Count > 0)
         {
             foreach (long CPN in GetConfirmedPrimeNumbers())
             {
                 ProgressPercentage += progressIncreaseRatio;
                 PrimeNumberIndexTextbox.AppendText(IndexForPrintingFoundPrimeNumbers.ToString("0,0") + ". " + CPN.ToString("0,0") + "\n");
                 ProgressBar.Value = ProgressPercentage;
                 IndexForPrintingFoundPrimeNumbers++;
             }
         }
     });
     PrimeNumberIndexTextbox.ScrollToEnd();
 }
コード例 #26
0
 public static Principal From(CPN identifier) => new Principal()
 {
     Identifier = identifier
 };
コード例 #27
0
 public void Remove(CPN principal)
 {
     this.storage.RemoveAll(p => p.Identifier == principal);
 }
コード例 #28
0
 public IEnumerable <PermissionGrant> GetByPrincipal(CPN principal) => GetByPrincipalAndSchema(principal, null);
コード例 #29
0
 public static PermissionGrant From(CPN grantor) => new PermissionGrant()
 {
     Grantor = grantor
 };
コード例 #30
0
 public PermissionGrant To(CPN principal)
 {
     Principal = principal;
     return(this);
 }