Example #1
0
        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;
        }
Example #2
0
        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);
            }
        }