Ejemplo n.º 1
0
        public static PFoundationTable GetOrganisationFoundation(long AFromPartnerKey)
        {
            PFoundationTable ReturnValue = null;
            TDBTransaction   Transaction = DBAccess.GDBAccessObj.BeginTransaction(IsolationLevel.ReadCommitted);

            try
            {
                PFoundationTable FoundationTable = PFoundationAccess.LoadViaPOrganisation(AFromPartnerKey, Transaction);

                if (FoundationTable.Rows.Count > 0)
                {
                    ReturnValue = FoundationTable;
                }
            }
            catch (Exception e)
            {
                TLogging.Log(e.ToString());
            }
            finally
            {
                DBAccess.GDBAccessObj.RollbackTransaction();
                TLogging.LogAtLevel(7, "TMergePartnersWebConnector.OrganisationIsFoundation: rollback own transaction.");
            }

            return(ReturnValue);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Tests whether the current user has access to a particular Partner.
        /// </summary>
        /// <remarks>
        /// <para>Corresponds to Progress 4GL Method 'CanAccessPartner' in
        /// common/sp_partn.p</para>
        /// <para>A shared implementation of this Method exists that has two additional
        /// Arguments. It needs the Foundation Row to be passed in, but has the
        /// advantage of not needing a Server roundtrip for a DB lookup!</para>
        /// </remarks>
        /// <param name="APartnerRow">Partner for which access should be checked for.</param>
        /// <param name="ADataBase">An instantiated <see cref="TDataBase" /> object, or null (default = null). If null
        /// gets passed then the Method executes DB commands with a new Database connection</param>
        /// <returns><see cref="T:TPartnerAccessLevelEnum.palGranted" /> if access
        /// to the Partner is granted, otherwise a different
        /// <see cref="T:TPartnerAccessLevelEnum" /> value.</returns>
        public static TPartnerAccessLevelEnum CanAccessPartner(
            PPartnerRow APartnerRow, TDataBase ADataBase = null)
        {
            TDBTransaction   ReadTransaction;
            Boolean          NewTransaction;
            PFoundationTable FoundationTable;

            if (APartnerRow.PartnerKey != 0)
            {
                // If PartnerClass is ORGANISATION, we need to check if it is a Foundation
                if (APartnerRow.PartnerClass == SharedTypes.PartnerClassEnumToString(
                        TPartnerClass.ORGANISATION))
                {
                    TDataBase db = DBAccess.Connect("DetermineBestAddress", ADataBase);
                    ReadTransaction = db.GetNewOrExistingTransaction(
                        IsolationLevel.ReadCommitted,
                        out NewTransaction);

                    // Load Foundation
                    try
                    {
                        FoundationTable = PFoundationAccess.LoadByPrimaryKey(APartnerRow.PartnerKey,
                                                                             ReadTransaction);

                        if (FoundationTable.Rows.Count > 0)
                        {
                            // The ORGANISATION is a Foundation, we need to check Foundation Security
                            return(Ict.Petra.Shared.MPartner.TSecurity.CanAccessPartner(APartnerRow,
                                                                                        true, FoundationTable[0]));
                        }
                        else
                        {
                            // The ORGANISATION isn't a Foundation, we don't need to check Foundation Security
                            return(Ict.Petra.Shared.MPartner.TSecurity.CanAccessPartner(APartnerRow,
                                                                                        false, null));
                        }
                    }
                    finally
                    {
                        if (NewTransaction)
                        {
                            ReadTransaction.Commit();
                            TLogging.LogAtLevel(8, "TSecurity.CanAccessPartnerByKey: committed own transaction.");
                        }
                    }
                }
                else
                {
                    // PartnerClass isn't ORGANISATION, we don't need to check Foundation Security
                    return(Ict.Petra.Shared.MPartner.TSecurity.CanAccessPartner(APartnerRow,
                                                                                false, null));
                }
            }
            else
            {
                // Invalid Partner. Access Level is Granted in this case.
                return(TPartnerAccessLevelEnum.palGranted);
            }
        }
Ejemplo n.º 3
0
        public static PFoundationTable GetOrganisationFoundation(long AFromPartnerKey)
        {
            PFoundationTable ReturnValue = null;
            TDBTransaction   Transaction = null;

            DBAccess.GDBAccessObj.BeginAutoReadTransaction(IsolationLevel.ReadCommitted,
                                                           ref Transaction,
                                                           delegate
            {
                PFoundationTable FoundationTable = PFoundationAccess.LoadViaPOrganisation(AFromPartnerKey, Transaction);

                if (FoundationTable.Rows.Count > 0)
                {
                    ReturnValue = FoundationTable;
                }
            });

            return(ReturnValue);
        }
Ejemplo n.º 4
0
        public static PFoundationTable GetOrganisationFoundation(long AFromPartnerKey)
        {
            PFoundationTable ReturnValue = null;
            TDBTransaction   Transaction = new TDBTransaction();

            DBAccess.ReadTransaction(
                ref Transaction,
                delegate
            {
                PFoundationTable FoundationTable = PFoundationAccess.LoadViaPOrganisation(AFromPartnerKey, Transaction);

                if (FoundationTable.Rows.Count > 0)
                {
                    ReturnValue = FoundationTable;
                }
            });

            return(ReturnValue);
        }