04/11: Web Part - User permission Part 2, DB Access
Because PSI cannot be used, we have to retrieve users permissions directly from DB. At first we have to find location of Project Server databases.
public class ProjectInfo
{
private string _csPublished;
private string _csWorking;
private string _csVersions;
private string _csReporting;
private string _sspURL;
public string sspURL
{
get { return _sspURL; }
set { }
}
public string ConnectionStringPublished
{
get { return _csPublished; }
set { }
}
public string ConnectionStringWorking
{
get { return _csWorking; }
set { }
}
public string ConnectionStringVersions
{
get { return _csVersions; }
set { }
}
public string ConnectionStringReporting
{
get { return _csReporting; }
set { }
}
public ProjectInfo(SPSite pwaSite)
{
ReadInfo(pwaSite.ID, pwaSite.WebApplication.Id);
}
private ProjectInfo(Guid pwaUID)
{
Guid AppUID;
using (SPSite sitePWA = new SPSite(pwaUID))
{
AppUID = sitePWA.WebApplication.Id;
ReadInfo(pwaUID, AppUID);
}
}
private void ReadInfo(Guid pwaUID, Guid AppUID)
{
ServerContext sc = ServerContext.Default;
object serverFarm = sc.GetType().GetField("m_ServerFarm", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(sc);
//Use reflection to get the ShareResourceProviders collection
object sharedResourceProviders = serverFarm.GetType().GetProperty("SharedResourceProviders").GetValue(serverFarm, null);
//Enumerate all Shared Service providers
foreach (object sharedResourceProvider in sharedResourceProviders as IEnumerable)
{
object WebApps = sharedResourceProvider.GetType().GetProperty("WebApplications").GetValue(sharedResourceProvider, null);
foreach (object webApp in WebApps as IEnumerable)
{
if ((Guid)webApp.GetType().GetProperty("Id").GetValue(webApp, null) == AppUID)
{
Guid sspGuid = (Guid)(sharedResourceProvider.GetType().GetProperty("AdministrationSiteId" /* "ApplicationId"*/).GetValue(sharedResourceProvider, null));
string sspName = sharedResourceProvider.GetType().GetProperty("Name").GetValue(sharedResourceProvider, null).ToString();
bool sspSSL = (bool)sharedResourceProvider.GetType().GetProperty("UseHttpsForWebServices").GetValue(sharedResourceProvider, null);
using (SPSite sspSite = new SPSite(sspGuid))
{
if (sspSSL)
{
_sspURL = string.Format("https://{0}:56738/{1}", sspSite.HostName, sspName);
}
else
{
_sspURL = string.Format("http://{0}:56737/{1}", sspSite.HostName, sspName);
}
}
};
}
object SharedApplications = sharedResourceProvider.GetType().GetProperty("SharedApplications").GetValue(sharedResourceProvider, null);
foreach (object sharedApplication in SharedApplications as IEnumerable)
{
if (sharedApplication.GetType().FullName == "Microsoft.Office.Project.Server.Administration.ProjectPSISharedApplication")
{
object ProvisionSettingsCollection = sharedApplication.GetType().GetProperty("SiteCollection" /*"ProvisionSettingsCollection"*/).GetValue(sharedApplication, null);
foreach (object ProvisionSettings in ProvisionSettingsCollection as IEnumerable)
{
Guid SiteID = (Guid)GetProperty(ProvisionSettings, "SiteId");
if (SiteID == pwaUID)
{
_csPublished = (String)GetProperty(GetProperty(ProvisionSettings, "PublishedDatabase"), "DatabaseConnectionString");
_csReporting = (String)GetProperty(GetProperty(ProvisionSettings, "ReportingDatabase"), "DatabaseConnectionString");
_csVersions = (String)GetProperty(GetProperty(ProvisionSettings, "VersionsDatabase"), "DatabaseConnectionString");
_csWorking = (String)GetProperty(GetProperty(ProvisionSettings, "WorkingDatabase"), "DatabaseConnectionString");
return;
}
}
}
}
}
}
private static object GetProperty(object obj, string property)
{
return obj.GetType().GetProperty(property).GetValue(obj, null);
}
}
Now we have DB connection string we can work directly with Project Database,
On project server PWA application pool sending all request to SSP so we have 2 option create custom Psi web service in SSP or grant PWA application pool account access to project server Published database.
SQL queries.
1)st we need list of Global permission it the same list which is returned by PSI
Security.ReadOrganizationalPermissions();
SELECT TOP (100) PERCENT dbo.MSP_WEB_CONVERSIONS.CONV_STRING, dbo.MSP_WEB_SECURITY_FEATURES_ACTIONS.WSEC_FEA_ACT_UID
FROM dbo.MSP_WEB_CONVERSIONS WITH (NOLOCK) INNER JOIN
dbo.MSP_WEB_SECURITY_FEATURES_ACTIONS WITH (NOLOCK) ON
dbo.MSP_WEB_CONVERSIONS.CONV_VALUE = dbo.MSP_WEB_SECURITY_FEATURES_ACTIONS.WSEC_FEA_ACT_NAME_ID
WHERE (dbo.MSP_WEB_CONVERSIONS.STRING_TYPE_UID = '{946E9CC0-ED95-4F6F-877F-9A9ADAB57929}') AND
(dbo.MSP_WEB_SECURITY_FEATURES_ACTIONS.WSEC_ON_OBJECT = 0) AND
(dbo.MSP_WEB_SECURITY_FEATURES_ACTIONS.WSEC_IS_ACTION = 1) AND
(dbo.MSP_WEB_CONVERSIONS.LANG_ID=1033)
ORDER BY dbo.MSP_WEB_SECURITY_FEATURES_ACTIONS.WSEC_FEA_ACT_NAME_ID
MSP_WEB_CONVERSIONS.CONV_STRING | WSEC_FEA_ACT_UID |
Log On | 7C40A2C2-FD15-44E3-8FD3-11B3E0A4E441 |
Change Password | 50A1912A-D723-4D7E-96E2-9C2EDE137B7D |
Manage Personal Notifications | FFB47A04-9B6A-4BC9-96B3-C333F744CEA3 |
Manage Resource Notifications | 215475D5-0146-42F2-9264-1B2BC07A0038 |
Reassign Task | 9F9F4BB3-FAF7-4555-A732-28667A399AB6 |
New Task Assignment | 14ABE02D-6AE6-4B65-8DA1-1BF5DDB51A4D |
Manage Rules | B2D30397-01EB-452C-9D25-D0953AA06EDB |
View Project View | 56013B8C-1437-4338-9356-92A23FEB1F69 |
View Project Center | BEA25870-B1C7-49B8-80E8-589639E83F67 |
View Resource Center | AA52DBF7-AC90-483E-A45F-1327285C5DB1 |
View Data Analysis | 9EFE1700-113D-452D-AE39-7A0957D0A18C |
View Resource Availability | 7D6548B4-8EE9-448E-BC6D-FFBF77FA8125 |
Edit Status Report Responses | 163696AB-DE91-4EE6-A333-D42D853788E9 |
Edit Status Report Requests | 76A9258E-9344-4CF7-B2E0-CC807C1AEB3D |
Manage users and groups | 635423A5-2BC6-45BD-A087-5174E56E2C71 |
Manage security | D9CA36C9-0C78-4696-984C-7F244EC8DECB |
Manage Project Web Access Views | AD896C92-0F59-46D1-8751-A81F23129B71 |
Manage Server Configuration | 922EC653-016D-46CB-BD7E-C7AEF36EA21C |
Manage Gantt Chart and Grouping Formats | F06BBF57-9E83-4831-AA2B-6C89FBF756F9 |
Manage Check-Ins | DD742D66-7D1D-4E0C-B175-66F3C2DA8A40 |
About Microsoft Office Project Server | AB7015F0-E63D-4B9B-838D-C5284A9F99C9 |
Clean Up Project Server Database | B9726448-8FEF-4ACF-AAF2-9071B59D9427 |
Manage Windows SharePoint Services | CF2C2663-A100-48D9-997D-A08C2B5EB98B |
New Project | 114052B8-7608-45DD-856C-E6D36DDAB765 |
New Resource | 85993AFD-5430-4C0E-BDCF-12E013FA0B1E |
Log on to Project Server from Project Professional | D2F88263-31C5-4FF5-BEAE-B98B26C5C116 |
Save Enterprise Global | BDB8E39D-9447-420B-9ACF-9441AFAED62A |
View Team Builder | A5DB765B-5D86-471C-A5FD-9183683544CB |
Save Project Template | 17E117C2-33CE-455E-AC75-EADF861B3E80 |
Open Project Template | 4ABCD8BE-41C7-4E77-BDB7-6A939618E974 |
Build Team on New Project | F867D4E6-895E-4CE3-8725-B5F5192DBD85 |
Save Unprotected Baseline | 000017EA-07D8-4CA1-84D8-80CFA1048FC1 |
Manage Enterprise Calendars | 0000FC8F-56A2-462C-9836-847931291C5F |
Manage Notification and Reminders | 0000E30E-92FC-4017-BE07-B9D60A7924C8 |
Manage Cube Building Service | 000047C4-9040-4E5B-A5F1-88D5E8FC4857 |
Manage Timesheet and Financial Periods | 00008BCA-E95B-4070-AE61-E0D9B57B78BA |
Manage Time Tracking | 0000C877-21B2-491A-89A0-1DDDD926675B |
View Approvals | 00008F95-48A5-43A1-98A1-F30A75846E46 |
View Surrogate Timesheet | 0000C062-7A33-4C36-B1FC-BDEB791CBFDF |
View Olap Data | 13634834-3CEB-45C3-B5E9-91C20FDE7469 |
Accept Timesheets | 0000B4BD-1A40-4639-840A-A3AF6B913BD0 |
Manage Project Server Backup | 00004402-9E14-41D2-9A99-C30951FAEA18 |
Manage Project Server Restore | 0000FDD8-8C71-41BA-8ABA-5338CD7BB9ED |
Manage Enterprise Custom Fields | 0000CB57-2AA1-4EE3-A46B-7BAA4A9F6C64 |
Create New Proposal or Activity | 00005C42-7BA9-4B2A-8B19-4B9CD1FA4853 |
Download Project Web Access Outlook Add-In | 0000D11E-297A-4D9A-99E6-738421502057 |
Contribute to Project Web Access | 0000B236-FBFF-43C5-8429-AD0FAB95D33C |
Manage Lists in Project Web Access | 000099F2-4062-4094-A5FE-FC90F40F8001 |
Manage Queue | 000033F6-671B-468E-8053-AE91E6A1C3B7 |
Manage Server Events | 00004048-9FAE-41EC-86D0-E0B9CF131837 |
Manage Status Reports | 0000A887-AEB1-4C61-967F-8AB404661573 |
View Resource Plan | 000046AC-7CE5-4FBB-8B52-E0568F3632EB |
Manage Active Directory Settings | 00007CE4-A116-4E60-9C71-D3E93EB41A09 |
View Resource Timesheet | 00000DE3-506F-4CEF-B1D9-616099AAE798 |
Change Project State | 00007AD8-3263-461D-8646-BE73FDB04AA2 |
Self-assign team tasks | 00009AAD-64D0-4FED-B528-EC50EF7E0D5F |
Close Tasks to Updates | AA299046-CCC6-4D74-AC0E-8CAED17EEF0A |
View Task Center | 8864C951-0655-499F-BFCF-8C7C92E5C2EE |
View Timesheet Center | 49658225-46B2-4623-A223-418020C8884A |
Bailey Button Ugg Boots wrote: