예제 #1
0
        public void TestCheckAccessClaimInUserValid()
        {
            string claim    = "View Documents";
            bool   expected = true;
            bool   actual;

            aM.user.Name = "Bob";
            aM.user.CollectionClaims.Add(claim);

            actual = aM.CheckAccess(claim);

            Console.WriteLine("Actual Value: " + actual);
            Assert.AreEqual(expected, actual);
        }
예제 #2
0
        public IHttpActionResult GetCampaign(string id_or_slug)
        {
            Campaign c = GetCampaignByIdOrSlug(id_or_slug);


            if (c.Status.HasFlag(CampaignStatus.Approved))
            {
                var vm = CampaignToCampaignVM(c);
                return(Ok(vm));
            }
            else if (User.Identity.IsAuthenticated)
            {
                if (User.Identity.GetUserId() != c.CreatedById.ToString())
                {
                    var auth       = new AuthorizationManager();
                    var haveAccess =
                        auth.CheckAccess(new AuthorizationContext(ClaimsPrincipal.Current, AuthResource.Campaigns, AuthAction.GetFullDetails));
                    if (!haveAccess)
                    {
                        return(Unauthorized());
                    }
                }

                var vm = CampaignToCampaignVM(c);
                //Add full details properties
                vm.CreatedById = c.CreatedById;
                return(Ok(vm));
            }
            else
            {
                return(Unauthorized());
            }
        }
예제 #3
0
        public static void AddItemsToNavigation(NavBarControl ribbon, object owner, string addInTreePath)
        {
            var adapter     = GetUIElementAdapter(ribbon);
            var descriptors = AddInTree.BuildItems <NavItemDescriptor>(addInTreePath, owner, false);
            List <NavItemDescriptor> removerItem = new List <NavItemDescriptor>();

            foreach (var descriptor in descriptors)
            {
                List <object> subRemoverItem = new List <object>();
                foreach (NavItemDescriptor subItem in descriptor.SubItems)
                {
                    if (!AuthorizationManager.CheckAccess(subItem.Codon.Id, "Read"))
                    {
                        subRemoverItem.Add(subItem);
                    }
                }
                foreach (var item in subRemoverItem)
                {
                    descriptor.SubItems.Remove(item);
                }

                if (descriptor.SubItems.Count <= 0)
                {
                    removerItem.Add(descriptor);
                }
            }
            foreach (var item in removerItem)
            {
                descriptors.Remove(item);
            }
            BuildParts(adapter, descriptors);
        }
예제 #4
0
        public async Task <IHttpActionResult> GetUserDocuments(int userId)
        {
            var user = db.Users.Find(userId);

            if (user == null)
            {
                return(BadRequest("Invalid userId"));
            }
            var docs       = user.UserDocumentMaps.Select(m => m.Document);
            var auth       = new AuthorizationManager();
            var haveAccess =
                auth.CheckAccess(new AuthorizationContext(ClaimsPrincipal.Current, AuthResource.UserDocuments, AuthAction.List));

            if (haveAccess)
            {
                return(Ok(await GetDocumentsWithDownloadLinks(docs)));
            }
            else
            {
                if (User.Identity.GetUserId() != userId.ToString())
                {
                    return(Unauthorized());
                }
                return(Ok(docs));
            }
        }
        public bool IsValid(object caller, Condition condition)
        {
            if (!(caller is IObjectDetailController))
            {
                return(true);
            }
            IObjectDetailController detailController = (IObjectDetailController)caller;

            if (!string.IsNullOrEmpty(condition.Properties["priviledge"]))
            {
                bool result = AuthorizationManager.CheckAccess(detailController.ObjectName, condition.Properties["priviledge"]);
                if (!result)
                {
                    return(result);
                }
            }
            string itemType = condition.Properties["type"];
            bool   status   = detailController.WorkingMode == EntityDetailWorkingMode.View;

            if (itemType == "edit")
            {
                return(status);
            }
            else
            {
                return(!status);
            }
        }
예제 #6
0
        public IHttpActionResult GetCampaigns(ODataQueryOptions <Campaign> options)
        {
            IQueryable <object> results;
            ODataQuerySettings  settings = new ODataQuerySettings();

            IQueryable <Campaign> campResults;
            var auth       = new AuthorizationManager();
            var haveAccess =
                auth.CheckAccess(new AuthorizationContext(ClaimsPrincipal.Current, AuthResource.Campaigns, AuthAction.List));

            /*NOTE:
             * Admin access should be different from home page access to campaigns
             * Only approved campaigns should come in home page, but Admin should have access to all campaigns
             * NOTE II: Access to removed campaign is open to question for admin!*/
            if (haveAccess) //Only For Admin
            {
                Console.WriteLine(options.Filter.RawValue);
                settings.PageSize = 20;
                var adminquery = db.Campaigns;
                campResults = options.ApplyTo(adminquery, settings) as IQueryable <Campaign>;

                results = campResults.Select(c => new
                {
                    //TODO: Add other needed properties for Admin
                    Id             = c.Id,
                    Title          = c.Title,
                    TargetFund     = c.TargetFund,
                    CollectedFund  = c.CollectedFund,
                    CategoryId     = c.CampaignCategoryId,
                    ProjectStageId = c.ProjectStageId,
                    Story          = c.Story,
                    Tagline        = c.Tagline,
                    Thumbnail      = c.ThumbnailFullPath,
                    Category       = c.Category == null ? null : c.Category.Name,
                    ProjectStage   = c.ProjectStage == null ? null : c.ProjectStage.Name
                });
                Console.WriteLine(results.ToString());
            }
            else
            {
                //TODO: Cache the first page. It's the same for all! and it is loaded more!
                var query = db.Campaigns.Where(c =>
                                               (c.TargetFund ?? -1) > 0 &&
                                               c.Status.HasFlag(CampaignStatus.Approved) //It could be Running/Fulfilled/Unfulfilled
                                               );


                //Restrict Options Here!
                System.Diagnostics.Debug.WriteLine(query.ToString());

                settings.PageSize = 4;
                results           = options.ApplyTo(query, settings) as IQueryable <Campaign>;
                results.Load(); //TODO: improve model and remove this to prevent multiple lazy loadings
            }
            return(Ok(new PageResult <object>(
                          results as IEnumerable <object>,
                          Request.ODataProperties().NextLink,
                          Request.ODataProperties().TotalCount)));
        }
        private void RegisterRelatedEntityCommand()
        {
            var allRelationshipRoles = MetadataProvider.Instance.EntityRelationshipRoles;
            var relationshipRoles    =
                allRelationshipRoles.Where(
                    role => role.Entity.PhysicalName == EntityName && role.NavPanelDisplayOption == 1);

            if (relationshipRoles.Any())
            {
                var relatedEntityButtons = new List <BarButtonItemEx>();
                foreach (var relationshipRole in relationshipRoles)
                {
                    var entityRelation = relationshipRole.EntityRelationship;
                    var relatedRole    = entityRelation.EntityRelationshipRoles
                                         .FirstOrDefault(r => r != relationshipRole &&
                                                         r.RelationshipRoleType == (int)RelationshipRoleType.ManyToOne);

                    if (relatedRole == null)
                    {
                        continue;
                    }

                    var name = relatedRole.Entity.PhysicalName;
                    if (!AuthorizationManager.CheckAccess(name, "Read"))
                    {
                        continue;
                    }
                    var relationship = entityRelation.EntityRelationshipRelationships.First().Relationship;

                    var localizedCaption = Properties.Resources.ResourceManager.GetString(name);
                    var buttonItem       = new BarButtonItemEx(name, "Search")
                    {
                        Caption = localizedCaption
                    };
                    buttonItem.ItemClick += (s, e) => { ShowRelatedEntityList(relationship, name); };
                    buttonItem.Name       = name;
                    if (relationshipRoles.Count() > 1)
                    {
                        buttonItem.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonItemStyles.SmallWithText |
                                                 DevExpress.XtraBars.Ribbon.RibbonItemStyles.SmallWithoutText;
                    }
                    buttonItem.ButtonStyle = BarButtonStyle.Check;
                    relatedEntityButtons.Add(buttonItem);
                }
                if (relatedEntityButtons.Any())
                {
                    var generalGroup =
                        UIExtensionSites["DetailHomePage"].Add(new RibbonPageGroup(GetLocalizedCaption("Related")));
                    UIExtensionSites.RegisterSite("DetailRelatedGroup", generalGroup);
                    foreach (var button in relatedEntityButtons)
                    {
                        UIExtensionSites["DetailRelatedGroup"].Add(button);
                    }
                }
            }
        }
예제 #8
0
 public void BindRole(List <Guid> selectedRoles)
 {
     if (!AuthorizationManager.CheckAccess("User", "Write"))
     {
         roleLookUpEdit.Enabled = false;
     }
     roleLookUpEdit.Properties.DisplayMember = "RoleName";
     roleLookUpEdit.Properties.BindDataAsync("Role", "RoleId", selectedRoles);
     roleLookUpEdit.Properties.View.OptionsSelection.MultiSelect = true;
 }
예제 #9
0
        public void Should_ReturnTrue_When_PrincipalHasClaim()
        {
            // Arrange
            var username = "******";
            var claims   = new List <Claim> {
                new Claim("Username", username)
            };
            var identity  = new ClaimsIdentity(claims);
            var principal = new ClaimsPrincipal(identity);

            var resource = ResourceConstant.PREFERENCES;
            var action   = ActionConstant.UPDATE;

            var context = new AuthorizationContext(principal, resource, action);

            // Act
            var result = manager.CheckAccess(context);

            // Assert
            result.Should().BeTrue();
        }
예제 #10
0
 private void SetCommandStatus(string commandName, string priviledge)
 {
     if (AuthorizationManager.CheckAccess(EntityName, priviledge))
     {
         bool initSatus = _entityListView.EntityGridView.DataSource == null && _entityListView.Context.BindingSource.ToArrayList().Count > 0;
         initSatus = initSatus || (_entityListView.SelectedEntity != null && _entityListView.EntityGridView.RowCount != 0);
         Commands[commandName].Status =
             initSatus ? CommandStatus.Enabled : CommandStatus.Disabled;
     }
     else
     {
         Commands[commandName].Status = CommandStatus.Unavailable;
     }
 }
예제 #11
0
        private List <Codon> GetSubItems(string entityName, AddIn addin, BuildItemArgs args)
        {
            List <Codon> codonList = new List <Codon>();

            if (string.IsNullOrEmpty(entityName))
            {
                return(codonList);
            }

            var allRelationshipRoles = MetadataRepository.EntityRelationshipRoles;
            var relationshipRoles    = allRelationshipRoles.Where(role => role.Entity.PhysicalName == entityName && role.NavPanelDisplayOption == 1);

            if (relationshipRoles.Any())
            {
                foreach (var relationshipRole in relationshipRoles)
                {
                    var entityRelation = relationshipRole.EntityRelationship;
                    var relatedRole    = entityRelation.EntityRelationshipRoles
                                         .FirstOrDefault(r => r != relationshipRole &&
                                                         r.RelationshipRoleType != (int)RelationshipRoleType.Relationship);
                    if (relatedRole == null)
                    {
                        continue;
                    }
                    var commandName = relatedRole.Entity.PhysicalName;
                    if (!AuthorizationManager.CheckAccess(commandName, "Read"))
                    {
                        continue;
                    }
                    ICSharpCode.Core.Properties properies = new ICSharpCode.Core.Properties();
                    properies.Set <string>("id", commandName);
                    properies.Set <string>("type", "Item");
                    properies.Set <string>("label", "${res:" + commandName + "}");
                    properies.Set <string>("imageName", commandName);
                    properies.Set <string>("overlay", "overlay_search");
                    properies.Set <string>("Parameter", commandName);
                    properies.Set <string>("groupName", "Related");
                    properies.Set <string>("class", "Katrin.Win.RelatedModule.Commands.RelatedCommand");
                    properies.Set <string>("builderid", "BarButtonItemBuilder");
                    if (relationshipRoles.Count() > 1)
                    {
                        properies.Set <string>("RibbonStyle", "Small");
                    }

                    Codon codon = new Codon(addin, "MenuItem", properies, args.Conditions.ToArray());
                    codonList.Add(codon);
                }
            }
            return(codonList);
        }
예제 #12
0
        public bool IsValid(object caller, Condition condition)
        {
            if (string.IsNullOrEmpty(condition.Properties["priviledge"]))
            {
                return(true);
            }
            if (!(caller is ListController))
            {
                return(true);
            }
            ListController listController = (ListController)caller;

            return(AuthorizationManager.CheckAccess(listController.ObjectName, condition.Properties["priviledge"]));
        }
예제 #13
0
        protected override void InitConvert()
        {
            List <ColumnMapping> mappingList = MetadataProvider.Instance.MappingList
                                               .Where(c => c.SourceEntityName == EntityName).ToList();
            var toConverList = mappingList.Select(c => c.TargetEntityName).Distinct();

            foreach (string commandName in toConverList)
            {
                if (!AuthorizationManager.CheckAccess(commandName, "Write"))
                {
                    continue;
                }
                RegisterPoupMenuItem(commandName, "Covert", commandName, OnConvertEntity);
            }
        }
예제 #14
0
        public void OnRefreshCommandStatus(object sender, EventArgs e)
        {
            var status   = (OpportunityStatus)DynamicEntity.StatusCode;
            var canWrite = AuthorizationManager.CheckAccess(EntityName, "Write");

            WorkItem.Commands["Recyle"].Status = canWrite && status == OpportunityStatus.Lost
                                                     ? CommandStatus.Enabled
                                                     : CommandStatus.Unavailable;

            var wonStatus = WorkingMode == EntityDetailWorkingMode.Edit &&
                            status == OpportunityStatus.InProgress && canWrite
                                ? CommandStatus.Enabled
                                : CommandStatus.Unavailable;

            WorkItem.Commands["Won"].Status = WorkItem.Commands["Fail"].Status = wonStatus;
        }
예제 #15
0
 protected virtual void UpdateCommandStatus()
 {
     Commands["EditMode"].Status = WorkingMode == EntityDetailWorkingMode.View &&
                                   AuthorizationManager.CheckAccess(EntityName, "Write")
                                       ? CommandStatus.Enabled
                                       : CommandStatus.Unavailable;
     if (WorkingMode == EntityDetailWorkingMode.View)
     {
         Commands["SaveAndClose"].Status = CommandStatus.Unavailable;
         Commands["Save"].Status         = CommandStatus.Unavailable;
     }
     else
     {
         Commands["SaveAndClose"].Status = HasChanges ? CommandStatus.Enabled : CommandStatus.Disabled;
         Commands["Save"].Status         = HasChanges ? CommandStatus.Enabled : CommandStatus.Disabled;
     }
     OnRefreshCommandStatus(EventArgs.Empty);
 }
예제 #16
0
        private void AddShowNavBarGroups()
        {
            _moduleGroups.Add("Sales", new List <string>(new[]
            {
                "Lead",
                "Opportunity", "Quote",
                "Contract", "Invoice",
                "Account", "Contact"
            }));
            _moduleGroups.Add("ProjectManagement", new List <string>(new[] { "Project", "ProjectTask", "ProjectWeekReport", "Attendance" }));
            _moduleGroups.Add("Reports", new List <string>(new[] { "OpportunityReport", "ProjectReport" }));
            _moduleGroups.Add("Services", new List <string>(new[] { "Product", "Task" }));
            _moduleGroups.Add("Administration", new List <string>(new[] { "User", "Role" }));


            foreach (var moduleGroup in _moduleGroups)
            {
                var group = new NavBarGroup(GetLocalizedCaption(moduleGroup.Key));
                foreach (var module in moduleGroup.Value)
                {
                    if (!AuthorizationManager.CheckAccess(module, "Read"))
                    {
                        continue;
                    }
                    var localizedCaption = GetLocalizedCaption(module);
                    var item             = new NavBarItem(localizedCaption);

                    string moduleName = module;
                    item.LinkClicked += (s, e) => ShowEntityList(moduleName);
                    item.Name         = module;
                    item.LargeImage   = GetBitmapByName(module, new Size(32, 32));
                    item.SmallImage   = GetBitmapByName(module, new Size(32, 32));
                    group.ItemLinks.Add(item);
                }
                if (group.ItemLinks.Count == 0)
                {
                    continue;
                }
                group.LargeImage = GetBitmapByName(moduleGroup.Key, new Size(32, 32));
                group.SmallImage = GetBitmapByName(moduleGroup.Key, new Size(32, 32));
                UIExtensionSites[ExtensionSiteNames.ShellNavBar].Add(group);
                UIExtensionSites.RegisterSite(moduleGroup.Key, group);
            }
        }
예제 #17
0
        private List <Codon> GetSubItems(string entityName, AddIn addin, BuildItemArgs args)
        {
            List <Codon> codonList = new List <Codon>();

            if (string.IsNullOrEmpty(entityName))
            {
                return(codonList);
            }
            List <ColumnMapping> mappingList = MetadataRepository.MappingList
                                               .Where(c => c.SourceEntityName == entityName).ToList();
            var toConverList = mappingList.Select(c => c.TargetEntityName).Distinct();

            if (toConverList.Any())
            {
                foreach (string commandName in toConverList)
                {
                    if (!AuthorizationManager.CheckAccess(commandName, "Write"))
                    {
                        continue;
                    }
                    ICSharpCode.Core.Properties properies = new ICSharpCode.Core.Properties();
                    properies.Set <string>("id", "Convert" + commandName);
                    properies.Set <string>("type", "Item");
                    properies.Set <string>("label", "${res:" + commandName + "}");
                    properies.Set <string>("imageName", commandName);
                    properies.Set <string>("Parameter", commandName);
                    properies.Set <string>("groupName", "Convert");
                    properies.Set <string>("overlay", "overlay_convert");
                    properies.Set <string>("class", "Katrin.Win.ConvertModule.Commands.CovertCommand");
                    properies.Set <string>("builderid", "BarButtonItemBuilder");
                    if (toConverList.Count() > 1)
                    {
                        properies.Set <string>("RibbonStyle", "Small");
                    }

                    Codon codon = new Codon(addin, "MenuItem", properies, args.Conditions.ToArray());
                    codonList.Add(codon);
                }
            }
            return(codonList);
        }
예제 #18
0
        private void InitConvert()
        {
            List <ColumnMapping> mappingList = MetadataProvider.Instance.MappingList
                                               .Where(c => c.SourceEntityName == EntityName).ToList();
            var toConverList = mappingList.Select(c => c.TargetEntityName).Distinct();

            if (toConverList.Any())
            {
                var convertEntityButtons = new List <BarButtonItemEx>();
                foreach (string commandName in toConverList)
                {
                    if (!AuthorizationManager.CheckAccess(commandName, "Write"))
                    {
                        continue;
                    }
                    var localizedCaption = GetLocalizedCaption(commandName);
                    var buttonItem       = new BarButtonItemEx(commandName, "convert")
                    {
                        Caption = localizedCaption
                    };
                    buttonItem.Name = commandName;
                    if (toConverList.Count() > 1)
                    {
                        buttonItem.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonItemStyles.SmallWithText |
                                                 DevExpress.XtraBars.Ribbon.RibbonItemStyles.SmallWithoutText;
                    }
                    buttonItem.ItemClick += (s, e) => { ShowRelatedEntityDetail(e.Item.Name, Guid.Empty, EntityDetailWorkingMode.Convert); };
                    convertEntityButtons.Add(buttonItem);
                }
                if (convertEntityButtons.Count > 0)
                {
                    var convertGroup = UIExtensionSites["DetailHomePage"].Add(new RibbonPageGroup(GetLocalizedCaption("ConvertTitle")));
                    UIExtensionSites.RegisterSite("DetailConvertGroup", convertGroup);
                    foreach (var button in convertEntityButtons)
                    {
                        UIExtensionSites["DetailConvertGroup"].Add(button);
                    }
                }
            }
        }
예제 #19
0
        public async Task <IHttpActionResult> GetCampaignDocuments(int campaignId)
        {
            var camp = await db.SafelyGetCampaignById(campaignId);

            var userId     = User.Identity.GetUserId();
            var docs       = camp.CampaignDocumentMaps.Select(m => m.Document);
            var auth       = new AuthorizationManager();
            var haveAccess =
                auth.CheckAccess(new AuthorizationContext(ClaimsPrincipal.Current, AuthResource.CampaignDocuments, AuthAction.List));

            if (haveAccess)
            {
                return(Ok(await GetDocumentsWithDownloadLinks(docs)));
            }
            else
            {
                if (camp.CreatedById.ToString() != userId)
                {
                    return(Unauthorized());
                }

                return(Ok(docs));
            }
        }
예제 #20
0
        protected virtual void UpdateCommandStatus()
        {
            Commands["Add"].Status = AuthorizationManager.CheckAccess(EntityName, "Create")
                                         ? CommandStatus.Enabled
                                         : CommandStatus.Unavailable;
            SetCommandStatus("Edit", "Write");
            SetCommandStatus("View", "Read");
            SetCommandStatus("Delete", "Delete");

            if (!UIExtensionSites.Contains("RelatedGroup"))
            {
                return;
            }

            var relatedItems = UIExtensionSites["RelatedGroup"];

            if (relatedItems != null)
            {
                var buttons = relatedItems.OfType <BarButtonItemEx>();
                foreach (var button in buttons)
                {
                    button.Enabled = _entityListView.SelectedEntity != null && _entityListView.EntityGridView.RowCount != 0;
                }
            }
            var convertSiteName = UIExtensionSites.Where(c => c.ToString() == "ConvertGroup");

            if (convertSiteName.ToList().Count > 0)
            {
                var convertItems = UIExtensionSites["ConvertGroup"];
                var buttons      = convertItems.OfType <BarButtonItemEx>();
                foreach (var button in buttons)
                {
                    button.Enabled = _entityListView.SelectedEntity != null && _entityListView.EntityGridView.RowCount != 0;
                }
            }
        }
예제 #21
0
 public AuthorizationManager.AccessRights CheckAccess(PemsCity city, string controller, string action, string userName)
 {
     return(_azManager.CheckAccess(city, controller, action, userName));
 }