private void CreateHooks(string parentId, IEnumerable <VirtualElementConfigurationElement> elements, List <EntityTokenHook> foundHooks) { var entityToken = new VirtualElementProviderEntityToken(_context.ProviderName, parentId); var entityTokenHook = new EntityTokenHook(entityToken); foreach (var attachProviderElement in elements.OfType <AttachProviderVirtualElement>()) { lock (_notLoadedVirtualElements) { if (_notLoadedVirtualElements.Contains(attachProviderElement.Name)) { continue; } } string providerName = attachProviderElement.ProviderName; var childElements = ElementFacade.GetRootsWithNoSecurity(new ElementProviderHandle(providerName), null).ToList(); foreach (Element childElement in childElements) { entityTokenHook.AddHookie(childElement.ElementHandle.EntityToken); } } foundHooks.Add(entityTokenHook); foreach (var simpleElement in elements.OfType <SimpleVirtualElement>()) { CreateHooks(simpleElement.Name, simpleElement.Elements, foundHooks); } }
/// <exclude /> public static ClientElement GetRoot() { List <Element> roots = ElementFacade.GetRoots(null).ToList(); if (roots.Count == 0) { // user with out any access logging in - return "empty root" roots = ElementFacade.GetRootsWithNoSecurity().ToList(); if (roots.Count == 0) { throw new InvalidOperationException("No roots specified"); } if (roots.Count > 1) { throw new InvalidOperationException("More than one root specified"); } var emptyElement = new Element(new ElementHandle("nullRoot", new NullRootEntityToken())); emptyElement.VisualData = new ElementVisualizedData { HasChildren = false, Label = "nullroot", Icon = CommonElementIcons.Folder }; roots.Clear(); roots.Add(emptyElement); } else if (roots.Count > 1) { throw new InvalidOperationException("More than one root specified"); } return(roots[0].GetClientElement()); }
/// <summary> /// This method returns true if the given username <paramref name="username"/> has admin rights on the root element. /// This is normal way of creating a administrator in C1. /// </summary> /// <param name="username">Username to test</param> /// <returns>True if the given username has admin rights on the root element.</returns> public static bool IsAdministrator(string username) { UserToken userToken = new UserToken(username); EntityToken rootEntityToken = ElementFacade.GetRootsWithNoSecurity().First().ElementHandle.EntityToken; IEnumerable <PermissionType> permissions = GetPermissions(userToken, rootEntityToken); return(permissions.Contains(PermissionType.Administrate)); }
private void UpdateFormDefinitionWithGlobalPermissions(IUserGroup userGroup, XElement bindingsElement, XElement placeHolderElement) { var helper = new GlobalPermissionsFormsHelper( SR.GetString("Composite.Plugins.UserGroupElementProvider", "EditUserGroup.EditUserGroupStep1.GlobalPermissionsFieldLabel"), SR.GetString("Composite.Plugins.UserGroupElementProvider", "EditUserGroup.EditUserGroupStep1.GlobalPermissionsMultiSelectLabel"), SR.GetString("Composite.Plugins.UserGroupElementProvider", "EditUserGroup.EditUserGroupStep1.GlobalPermissionsMultiSelectHelp") ); bindingsElement.Add(helper.GetBindingsMarkup()); placeHolderElement.Add(helper.GetFormMarkup()); EntityToken rootEntityToken = ElementFacade.GetRootsWithNoSecurity().Select(f => f.ElementHandle.EntityToken).Single(); IEnumerable <PermissionType> permissionTypes = PermissionTypeFacade.GetLocallyDefinedUserGroupPermissionTypes(userGroup.Id, rootEntityToken).ToList(); helper.UpdateWithNewBindings(this.Bindings, permissionTypes); }
public void Initialize() { using (_resourceLocker.Locker) { var resources = _resourceLocker.Resources; if (!GlobalInitializerFacade.IsReinitializingTheSystem) { DataEvents <IDataItemTreeAttachmentPoint> .OnAfterAdd += OnUpdateTreeAttachmentPoints; DataEvents <IDataItemTreeAttachmentPoint> .OnDeleted += OnUpdateTreeAttachmentPoints; DataEvents <IDataItemTreeAttachmentPoint> .OnStoreChanged += OnTreeAttachmentPointsStoreChange; GeneratedTypesFacade.SubscribeToUpdateTypeEvent(OnDataTypeChanged); var treeAuxiliaryAncestorProvider = new TreeAuxiliaryAncestorProvider(); var entityTokenTypes = new[] { typeof(TreeSimpleElementEntityToken), typeof(TreeFunctionElementGeneratorEntityToken), typeof(TreeDataFieldGroupingElementEntityToken), typeof(DataEntityToken), typeof(TreePerspectiveEntityToken) }; entityTokenTypes.ForEach(type => AuxiliarySecurityAncestorFacade .AddAuxiliaryAncestorProvider(type, treeAuxiliaryAncestorProvider, true)); resources.PersistentAttachmentPoints = new Dictionary <string, List <IAttachmentPoint> >(); LoadAllTrees(); InitializeTreeAttachmentPoints(); TreeSharedRootsFacade.Clear(); var fileWatcher = new C1FileSystemWatcher(TreeDefinitionsFolder, "*.xml"); fileWatcher.Created += OnReloadTrees; fileWatcher.Deleted += OnReloadTrees; fileWatcher.Changed += OnReloadTrees; fileWatcher.Renamed += OnReloadTrees; fileWatcher.EnableRaisingEvents = true; resources.FileSystemWatcher = fileWatcher; resources.RootEntityToken = ElementFacade.GetRootsWithNoSecurity().First().ElementHandle.EntityToken; } } }
private void saveCodeActivity_Save_ExecuteCode(object sender, EventArgs e) { IUserGroup userGroup = this.GetBinding <IUserGroup>("UserGroup"); List <string> newUserGroupEntityTokens = ActivePerspectiveFormsHelper.GetSelectedSerializedEntityTokens(this.Bindings).ToList(); // If current user belongs to currently edited group -> checking that user won't lost access "Users" perspective if (!ValidateUserPreservesAdminRights(userGroup, newUserGroupEntityTokens)) { return; } UpdateTreeRefresher updateTreeRefresher = CreateUpdateTreeRefresher(this.EntityToken); EntityToken rootEntityToken = ElementFacade.GetRootsWithNoSecurity().Select(f => f.ElementHandle.EntityToken).Single(); IEnumerable <PermissionType> newPermissionTypes = GlobalPermissionsFormsHelper.GetSelectedPermissionTypes(this.Bindings); UserGroupPermissionDefinition userGroupPermissionDefinition = new ConstructorBasedUserGroupPermissionDefinition( userGroup.Id, newPermissionTypes, EntityTokenSerializer.Serialize(rootEntityToken) ); PermissionTypeFacade.SetUserGroupPermissionDefinition(userGroupPermissionDefinition); UserGroupPerspectiveFacade.SetSerializedEntityTokens(userGroup.Id, newUserGroupEntityTokens); SetSaveStatus(true); LoggingService.LogEntry("UserManagement", $"C1 Console user group '{userGroup.Name}' updated by '{UserValidationFacade.GetUsername()}'.", LoggingService.Category.Audit, TraceEventType.Information); if (userGroup.Name != this.GetBinding <string>("OldName")) { DataFacade.Update(userGroup); this.UpdateBinding("OldName", userGroup.Name); updateTreeRefresher.PostRefreshMesseges(userGroup.GetDataEntityToken()); } }
private void UpdateFormDefinitionWithActiveLocalePermissions(IUserGroup userGroup, XElement bindingsElement, XElement placeHolderElement) { var helper = new ActiveLocalesFormsHelper( SR.GetString("Composite.Plugins.UserGroupElementProvider", "EditUserGroup.EditUserGroupStep1.ActiveLocalesFieldLabel"), SR.GetString("Composite.Plugins.UserGroupElementProvider", "EditUserGroup.EditUserGroupStep1.ActiveLocalesMultiSelectLabel"), SR.GetString("Composite.Plugins.UserGroupElementProvider", "EditUserGroup.EditUserGroupStep1.ActiveLocalesMultiSelectHelp") ); bindingsElement.Add(helper.GetBindingsMarkup()); placeHolderElement.Add(helper.GetFormMarkup()); EntityToken rootEntityToken = ElementFacade.GetRootsWithNoSecurity().Select(f => f.ElementHandle.EntityToken).Single(); using (var connection = new DataConnection()) { IEnumerable <CultureInfo> activeCultures = null; activeCultures = connection.Get <IUserGroupActiveLocale>().Where(f => f.UserGroupId == userGroup.Id).Select(f => new CultureInfo(f.CultureName)); helper.UpdateWithNewBindings(this.Bindings, activeCultures); } }
/// <exclude /> protected void RefreshRootEntityToken() { SpecificTreeRefresher specificTreeRefresher = this.CreateSpecificTreeRefresher(); specificTreeRefresher.PostRefreshMesseges(ElementFacade.GetRootsWithNoSecurity().First().ElementHandle.EntityToken); }
private void saveCodeActivity_Save_ExecuteCode(object sender, EventArgs e) { IUserGroup userGroup = this.GetBinding <IUserGroup>("UserGroup"); List <string> newUserGroupEntityTokens = ActivePerspectiveFormsHelper.GetSelectedSerializedEntityTokens(this.Bindings).ToList(); // If current user belongs to currently edited group -> checking that user won't lost access "Users" perspective if (!ValidateUserPreservesAdminRights(userGroup, newUserGroupEntityTokens)) { return; } UpdateTreeRefresher updateTreeRefresher = CreateUpdateTreeRefresher(this.EntityToken); EntityToken rootEntityToken = ElementFacade.GetRootsWithNoSecurity().Select(f => f.ElementHandle.EntityToken).Single(); IEnumerable <PermissionType> newPermissionTypes = GlobalPermissionsFormsHelper.GetSelectedPermissionTypes(this.Bindings); UserGroupPermissionDefinition userGroupPermissionDefinition = new ConstructorBasedUserGroupPermissionDefinition( userGroup.Id, newPermissionTypes, EntityTokenSerializer.Serialize(rootEntityToken) ); PermissionTypeFacade.SetUserGroupPermissionDefinition(userGroupPermissionDefinition); UserGroupPerspectiveFacade.SetSerializedEntityTokens(userGroup.Id, newUserGroupEntityTokens); List <CultureInfo> selectedUserGroupActiveLocales = ActiveLocalesFormsHelper.GetSelectedLocalesTypes(this.Bindings).ToList(); using (var connection = new DataConnection()) { var existingLocales = connection.Get <IUserGroupActiveLocale>().Where(f => f.UserGroupId == userGroup.Id).ToList(); var toDelete = existingLocales.Where(f => !selectedUserGroupActiveLocales.Contains(new CultureInfo(f.CultureName))); connection.Delete <IUserGroupActiveLocale>(toDelete); foreach (var localeToAdd in selectedUserGroupActiveLocales.Where(f => !existingLocales.Any(g => g.CultureName == f.Name))) { var toAdd = connection.CreateNew <IUserGroupActiveLocale>(); toAdd.Id = Guid.NewGuid(); toAdd.UserGroupId = userGroup.Id; toAdd.CultureName = localeToAdd.Name; connection.Add(toAdd); } } SetSaveStatus(true); LoggingService.LogEntry("UserManagement", $"C1 Console user group '{userGroup.Name}' updated by '{UserValidationFacade.GetUsername()}'.", LoggingService.Category.Audit, TraceEventType.Information); if (userGroup.Name != this.GetBinding <string>("OldName")) { DataFacade.Update(userGroup); this.UpdateBinding("OldName", userGroup.Name); updateTreeRefresher.PostRefreshMesseges(userGroup.GetDataEntityToken()); } }
/// <summary> /// Used for "first time" login on systems configured for this. A way to create the first user. This only works on systems /// with no users and with a valid "auto create admin username" specified by the global settings. /// </summary> /// <param name="userName">The user name - must match GlobalSettingsProvider.AutoCreatedAdministratorUserName</param> /// <param name="password">A password that meets a minimum requirement.</param> /// <param name="email">THe users email.</param> /// <param name="validateAutoCreateUserName">When true only the username specified in Composite.config as auto createable (usually 'admin') is allowed. Set to false to use a different user name.</param> /// <returns>true if the user was auto created. Otherwise false.</returns> public static void AutoCreateAdministrator(string userName, string password, string email, bool validateAutoCreateUserName = true) { if (validateAutoCreateUserName && !CanBeAutoCreated(userName)) { throw new InvalidOperationException("Unable to auto create account. Either the user name is not eligble for auto creation or other users exists in the system. This feature only works for a specific user name and when no users exists."); } if (!LoginProviderPluginFacade.CanAddNewUser) { throw new InvalidOperationException("Unable to auto create account. The current login provider does not support adding users"); } if (!PermissionTypeFacade.CanAlterDefinitions) { throw new InvalidOperationException("Unable to auto create account. The current permission defintion provider does not support changes"); } //PasswordValidator validator = new PasswordValidator(); //ValidationResults validationResults = validator.Validate(password); //if (validationResults.IsValid == false) //{ // throw new InvalidOperationException("Unable to auto create account. The specified password is not strong enough."); //} // All seems bo be ok green light go for auto creating the user. string group = StringResourceSystemFacade.GetString("Composite.C1Console.Users", "AdministratorAutoCreator.DefaultGroupName"); LoginProviderPluginFacade.FormAddNewUser(userName, password, group, email); Log.LogVerbose("AdministratorAutoCreator", String.Format("Auto Created Administrator with user name '{0}'.", userName), LoggingService.Category.Audit); IUser user = DataFacade.GetData <IUser>().Where(f => f.Username == userName).SingleOrDefault(); IUserGroup userGroup = DataFacade.GetData <IUserGroup>().Where(f => f.Name == "Administrator").SingleOrDefault(); if (user != null && userGroup != null) { IUserUserGroupRelation userUserGroupRelation = DataFacade.BuildNew <IUserUserGroupRelation>(); userUserGroupRelation.UserId = user.Id; userUserGroupRelation.UserGroupId = userGroup.Id; DataFacade.AddNew <IUserUserGroupRelation>(userUserGroupRelation); } else { foreach (Element appRootElement in ElementFacade.GetRootsWithNoSecurity()) { string serializedEntityToken = EntityTokenSerializer.Serialize(appRootElement.ElementHandle.EntityToken); LoggingService.LogVerbose("AdministratorAutoCreator", String.Format("Adding '{0}' on element '{1}' ('{2}').", userName, appRootElement.VisualData.Label ?? "(no label)", serializedEntityToken), LoggingService.Category.Audit); UserPermissionDefinition userPermissionDefinition = new ConstructorBasedUserPermissionDefinition(userName, PermissionTypeFacade.GrantingPermissionTypes, serializedEntityToken); PermissionTypeFacade.SetUserPermissionDefinition(userPermissionDefinition); } Log.LogVerbose("AdministratorAutoCreator", string.Format("Activating all known perspectives for user '{0}'", userName)); IEnumerable <EntityToken> perspectiveEntityTokens = ElementFacade.GetPerspectiveElementsWithNoSecurity().Select(f => f.ElementHandle.EntityToken); UserPerspectiveFacade.SetEntityTokens(userName, perspectiveEntityTokens); } foreach (CultureInfo cultureInfo in DataLocalizationFacade.ActiveLocalizationCultures) { UserSettings.AddActiveLocaleCultureInfo(userName, cultureInfo); if (Core.Localization.LocalizationFacade.IsDefaultLocale(cultureInfo)) { UserSettings.SetCurrentActiveLocaleCultureInfo(userName, cultureInfo); UserSettings.SetForeignLocaleCultureInfo(userName, cultureInfo); } } }