private List<RoleMemberInfo> GetGroupMembers(DirectoryEntry group, Database db, Role r, int Indent) { List<RoleMemberInfo> listRoleMembers = new List<RoleMemberInfo>(); try { if (group != null && group.Invoke("Members") != null) { foreach (object member in (System.Collections.IEnumerable)group.Invoke("Members")) { DirectoryEntry memberEntry = new DirectoryEntry(member); RoleMemberInfo infoMember = new RoleMemberInfo(); infoMember.TargetServerName = _deploymentTargetServer; infoMember.database = db; infoMember.role = r; infoMember.MemberName = GetDomainAndUserForDirectoryEntry(memberEntry); try { if (memberEntry.Path.ToUpper().StartsWith("WINNT:")) { DirectoryEntry directoryEntryLDAP = GetDirectoryEntryFromSID(memberEntry); if (directoryEntryLDAP != null) memberEntry = directoryEntryLDAP; } } catch { } infoMember.directoryEntry = memberEntry; infoMember.MemberIndent = Indent; listRoleMembers.Add(infoMember); if (Indent < 20) //prevent infinite recursion, though I'm not sure that's possible listRoleMembers.AddRange(GetGroupMembers(memberEntry, db, r, Indent + 1)); } } } catch { } return listRoleMembers; }
public override void Exec() { try { UIHierarchy solExplorer = this.ApplicationObject.ToolWindows.SolutionExplorer; UIHierarchyItem hierItem = (UIHierarchyItem)((System.Array)solExplorer.SelectedItems).GetValue(0); ProjectItem projItem = (ProjectItem)hierItem.Object; Database db = null; string sFileName = ((ProjectItem)hierItem.Object).Name.ToLower(); bool bIsTabular = false; if (sFileName.EndsWith(".bim")) { #if DENALI || SQL2014 Microsoft.AnalysisServices.BackEnd.DataModelingSandbox sandbox = TabularHelpers.GetTabularSandboxFromBimFile(hierItem, true); db = sandbox.Database; bIsTabular = true; #endif } else { db = projItem.ContainingProject.Object as Database; } DeploymentSettings _deploymentSettings = new DeploymentSettings(projItem); //get the target server _deploymentTargetServer = _deploymentSettings.TargetServer; List<RoleMemberInfo> listRoleMembers = new List<RoleMemberInfo>(); List<RoleDataSourceInfo> listRoleDataSources = new List<RoleDataSourceInfo>(); List<RoleCubeInfo> listRoleCubes = new List<RoleCubeInfo>(); List<RoleDimensionInfo> listRoleDimensions = new List<RoleDimensionInfo>(); List<RoleMiningInfo> listRoleMining = new List<RoleMiningInfo>(); foreach (Role r in db.Roles) { if (r.Members.Count == 0) { RoleMemberInfo infoMember = new RoleMemberInfo(); infoMember.TargetServerName = _deploymentTargetServer; infoMember.database = db; infoMember.role = r; listRoleMembers.Add(infoMember); } foreach (RoleMember rm in r.Members) { RoleMemberInfo infoMember = new RoleMemberInfo(); infoMember.TargetServerName = _deploymentTargetServer; infoMember.database = db; infoMember.role = r; infoMember.directoryEntry = GetDirectoryEntry(rm.Name); infoMember.MemberName = GetDomainAndUserForDirectoryEntry(infoMember.directoryEntry); if (string.IsNullOrEmpty(infoMember.MemberName)) infoMember.MemberName = rm.Name; listRoleMembers.Add(infoMember); listRoleMembers.AddRange(GetGroupMembers(infoMember.directoryEntry, db, r, 1)); } if (!bIsTabular) { foreach (DataSource ds in db.DataSources) { RoleDataSourceInfo info = new RoleDataSourceInfo(); info.role = r; info.dataSource = ds; listRoleDataSources.Add(info); } foreach (Cube c in db.Cubes) { RoleCubeInfo info = new RoleCubeInfo(); info.role = r; info.cube = c; listRoleCubes.Add(info); } foreach (MiningStructure ms in db.MiningStructures) { RoleMiningInfo info = new RoleMiningInfo(); info.role = r; info.miningStructure = ms; listRoleMining.Add(info); foreach (MiningModel mm in ms.MiningModels) { info = new RoleMiningInfo(); info.role = r; info.miningStructure = ms; info.miningModel = mm; listRoleMining.Add(info); } } } foreach (Dimension d in db.Dimensions) { RoleDimensionInfo info = new RoleDimensionInfo(); info.role = r; info.dimension = d; if (!bIsTabular || !string.IsNullOrEmpty(info.AllowedMemberSet)) listRoleDimensions.Add(info); if (!bIsTabular) { foreach (DimensionAttribute da in d.Attributes) { RoleDimensionInfo info2 = new RoleDimensionInfo(); info2.role = r; info2.dimension = d; info2.dimensionAttribute = da; if (!string.IsNullOrEmpty(info2.AllowedMemberSet) || !string.IsNullOrEmpty(info2.DeniedMemberSet) || !string.IsNullOrEmpty(info2.DefaultMember) || !string.IsNullOrEmpty(info2.VisualTotals)) listRoleDimensions.Add(info2); } } } if (!bIsTabular) { foreach (Cube c in db.Cubes) { foreach (CubeDimension cd in c.Dimensions) { RoleDimensionInfo info = new RoleDimensionInfo(); info.role = r; info.dimension = cd.Dimension; info.cubeDimension = cd; if (info.ReadAccess != "Inherited") listRoleDimensions.Add(info); foreach (CubeAttribute ca in cd.Attributes) { RoleDimensionInfo info2 = new RoleDimensionInfo(); info2.role = r; info2.dimension = cd.Dimension; info2.cubeDimension = cd; info2.dimensionAttribute = ca.Attribute; if (!string.IsNullOrEmpty(info2.AllowedMemberSet) || !string.IsNullOrEmpty(info2.DeniedMemberSet) || !string.IsNullOrEmpty(info2.DefaultMember) || !string.IsNullOrEmpty(info2.VisualTotals)) listRoleDimensions.Add(info2); } } RoleDimensionInfo infoMeasures = new RoleDimensionInfo(); infoMeasures.role = r; infoMeasures.isMeasuresDimension = true; infoMeasures.cube = c; if (!string.IsNullOrEmpty(infoMeasures.AllowedMemberSet) || !string.IsNullOrEmpty(infoMeasures.DeniedMemberSet) || !string.IsNullOrEmpty(infoMeasures.DefaultMember) || !string.IsNullOrEmpty(infoMeasures.VisualTotals)) listRoleDimensions.Add(infoMeasures); } } } ReportViewerForm frm = new ReportViewerForm(); frm.ReportBindingSource.DataSource = listRoleMembers; frm.Report = "SSAS.RolesReport.rdlc"; Microsoft.Reporting.WinForms.ReportDataSource reportDataSource1 = new Microsoft.Reporting.WinForms.ReportDataSource(); reportDataSource1.Name = "BIDSHelper_RoleMemberInfo"; reportDataSource1.Value = frm.ReportBindingSource; frm.ReportViewerControl.LocalReport.DataSources.Add(reportDataSource1); Microsoft.Reporting.WinForms.ReportDataSource reportDataSource2 = new Microsoft.Reporting.WinForms.ReportDataSource(); reportDataSource2.Name = "BIDSHelper_RoleDataSourceInfo"; reportDataSource2.Value = listRoleDataSources; frm.ReportViewerControl.LocalReport.DataSources.Add(reportDataSource2); Microsoft.Reporting.WinForms.ReportDataSource reportDataSource3 = new Microsoft.Reporting.WinForms.ReportDataSource(); reportDataSource3.Name = "BIDSHelper_RoleCubeInfo"; reportDataSource3.Value = listRoleCubes; frm.ReportViewerControl.LocalReport.DataSources.Add(reportDataSource3); Microsoft.Reporting.WinForms.ReportDataSource reportDataSource4 = new Microsoft.Reporting.WinForms.ReportDataSource(); reportDataSource4.Name = "BIDSHelper_RoleDimensionInfo"; reportDataSource4.Value = listRoleDimensions; frm.ReportViewerControl.LocalReport.DataSources.Add(reportDataSource4); Microsoft.Reporting.WinForms.ReportDataSource reportDataSource5 = new Microsoft.Reporting.WinForms.ReportDataSource(); reportDataSource5.Name = "BIDSHelper_RoleMiningInfo"; reportDataSource5.Value = listRoleMining; frm.ReportViewerControl.LocalReport.DataSources.Add(reportDataSource5); frm.ReportViewerControl.LocalReport.ReportEmbeddedResource = frm.Report; frm.Parameters.Add(new Microsoft.Reporting.WinForms.ReportParameter("IsTabular", (bIsTabular ? "true" : "false"), false)); frm.Caption = "Roles Report"; frm.WindowState = System.Windows.Forms.FormWindowState.Maximized; frm.Show(); } catch (System.Exception ex) { MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace); } }