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