public Role Create(string name, string description, IList<Permission> permissions) { if (this.Exists(name, null)) { return this._dataSource.Query<Role>().First(r => r.Name.ToLower() == name.ToLower()); } var currentGroupId = StrixPlatform.User.GroupId; var role = new Role(Guid.NewGuid(), currentGroupId, name); role.Description = description; role.Permissions = permissions; _roleIdsAndNames.Clear(); return this._dataSource.Save(role); }
private void CreatePermissions(IList<IModuleConfiguration> moduleConfigurations, Role adminPermissionSet) { var allPermissions = moduleConfigurations.SelectMany(c => c.ModulePermissions.SelectMany(p => p.Value)).Distinct().ToArray(); var permissionsToCreate = allPermissions.ToLower().Except(this._dataSource.Query<Permission>().Where(p => p.ApplicationId == _appId).Select(p => p.Name.ToLower())); // Create all the permissions that do not yet exist. var saveChanges = false; foreach (var permissionName in allPermissions.Where(p => permissionsToCreate.Contains(p.ToLower()))) { var permission = new Permission(Guid.NewGuid(), _appId, permissionName); this._dataSource.Save(permission); adminPermissionSet.Permissions.Add(permission); saveChanges = true; } if (saveChanges) { this._dataSource.SaveChanges(); } }
private void CreateAndUpdateRoles(IList<IModuleConfiguration> moduleConfigurations) { var saveChanges = false; var existingPermissions = this._dataSource.Query<Permission>().Where(p => p.ApplicationId == _appId).ToList(); var existingRoles = this._dataSource.Query<Role>("Permissions").Where(r => r.Permissions.Count == 0 || r.Permissions.Any(p => p.ApplicationId == _appId)).ToList(); var allRoles = moduleConfigurations.SelectMany(c => c.ModulePermissions.Keys).Distinct().ToArray(); // Add all the permissions to all the roles when not assigned yet, creating the roles // when they don't exist. foreach (var roleName in allRoles) { var role = existingRoles.FirstOrDefault(r => r.Name.ToLower() == roleName.ToLower()); if (role == null) { role = new Role(Guid.NewGuid(), _mainGroup.Id, roleName); role.Permissions = new List<Permission>(); role.Groups = new List<GroupInRole>(); var mainGroupInRole = new GroupInRole(_mainGroup.Id, role.Id); role.Groups.Add(mainGroupInRole); this._dataSource.Save(role); saveChanges = true; } var permissionsToReview = existingPermissions.Where(p => moduleConfigurations.Where(c => c.ModulePermissions.ContainsKey(roleName)).SelectMany(c => c.ModulePermissions[roleName]).Distinct().ToLower().Contains(p.Name.ToLower())).ToList(); var permissionsToAdd = permissionsToReview.Where(p => !role.Permissions.Any(rp => rp.Name.ToLower() == p.Name.ToLower())).ToList(); var permissionsToRemove = role.Permissions.Where(p => !permissionsToReview.Select(pr => pr.Name.ToLower()).Contains(p.Name.ToLower())).ToList(); foreach (var permission in permissionsToRemove) { var thePermission = role.Permissions.First(p => p.Id == permission.Id); role.Permissions.Remove(thePermission); saveChanges = true; } foreach (var permission in permissionsToAdd) { role.Permissions.Add(permission); saveChanges = true; } } if (saveChanges) { this._dataSource.SaveChanges(); } }
private Role CreateAdminPermissionSet() { var adminPermissionSet = this._dataSource.Query<Role>("Permissions").FirstOrDefault(r => r.Permissions.Any(p => p.ApplicationId == _appId) && r.Name.ToLower() == Resources.DefaultValues.PermissionSetName.ToLower()); if (adminPermissionSet == null) { adminPermissionSet = new Role(Guid.NewGuid(), _mainGroup.Id, Resources.DefaultValues.PermissionSetName); adminPermissionSet.Permissions = new List<Permission>(); var adminGroupPermissionSet = new GroupInRole(_mainGroup.Id, adminPermissionSet.Id); adminGroupPermissionSet.StartDate = DateTime.Now; this._dataSource.Save(adminPermissionSet); this._dataSource.Save(adminGroupPermissionSet); adminPermissionSet.Groups = new List<GroupInRole> { adminGroupPermissionSet }; this._dataSource.SaveChanges(); } return adminPermissionSet; }
public void InitMainGroup() { if (_mainGroup == null) { _mainGroup = this._dataSource.Query<Group>("Roles.Role").Where(g => g.Name.ToLower() == Resources.DefaultValues.MainGroupName).FirstOrDefault(); if (_mainGroup == null) { var mainGroup = new Group(Guid.NewGuid(), Resources.DefaultValues.MainGroupName); this._dataSource.Save(mainGroup); var adminRole = new Role(Guid.NewGuid(), mainGroup.Id, PlatformConstants.ADMINROLE); this._dataSource.Save(adminRole); var groupRole = new GroupInRole(mainGroup.Id, adminRole.Id, DateTime.Now, null); groupRole.CurrentNumberOfUsers = 1; this._adminRole = groupRole; mainGroup.Roles = new List<GroupInRole>() { groupRole }; _mainGroup = mainGroup; this._dataSource.SaveChanges(); } else { this._adminRole = _mainGroup.Roles.First(r => r.Role.Name.ToLower() == PlatformConstants.ADMINROLE.ToLower()); } } }