Exemple #1
0
 public static void SetTechUserSessionInfo(EsamSession ses)
 {
     ses.UserAuthName = "IsoNotifyTechUser";
     ses.UserId       = "00000000-0000-0000-0000-000000000002";
     ses.UserAuthId   = "00000000-0000-0000-0000-000000000002";
     ses.FirstName    = "Technicky";
     ses.LastName     = "Ucet";
     ses.Email        = "*****@*****.**";
     ses.DisplayName  = "DATALAN, a.s. Vilo";
     ses.FullName     = ses.DisplayName;
     ses.EvidCisloZam = "007";
 }
Exemple #2
0
        public static void SetUserTenantSession(EsamSession ses, System.Data.IDbConnection db, ServiceStack.Caching.ICacheClient cache)
        {
            var userId = Guid.Parse(ses.UserId);

            var tenants = db.Select <Guid>("SELECT D_Tenant_Id FROM cfe.D_UserTenant WHERE (DatumPlatnosti is null or DatumPlatnosti > getdate()) AND D_User_Id = @userid ORDER BY D_UserTenant_Id", new { userid = userId });

            if (!tenants.Any())
            {
                throw new WebEasValidationException(null, $"User {ses.DisplayName} doesn't have access to any company  !");
            }

            if (string.IsNullOrEmpty(ses.TenantId))
            {
                var lastUsedTenant = cache.Get <string>($"LastUsedTenant:{ses.UserId}");
                if (!string.IsNullOrEmpty(lastUsedTenant) && tenants.Contains(Guid.Parse(lastUsedTenant)))
                {
                    ses.TenantId = lastUsedTenant;
                }
                else
                {
                    ses.TenantId = tenants.First().ToString();
                }
            }
            else
            {
                if (!tenants.Contains(ses.TenantIdGuid.Value))
                {
                    throw new WebEasValidationException(null, $"User {ses.DisplayName} doesn't have access to login!");
                }
            }

            cache.Set($"LastUsedTenant:{ses.UserId}", ses.TenantId);
            ses.TenantIds = tenants;

            if (!string.IsNullOrEmpty(ses.TenantId))
            {
                ses.TenantId = ses.TenantId.ToUpper();
                var isoId = db.Single <string>("SELECT IsoId FROM cfe.D_Tenant WHERE D_Tenant_Id = @tenantId", new { tenantId = ses.TenantId });
                ses.IsoId = isoId;

                byte[] tenant   = Guid.Parse(ses.TenantId).ToByteArray();
                byte[] endpoint = new byte[] { (byte)Context.EndpointType.Office };
                byte[] dcomId   = userId.ToByteArray();
                byte[] rola     = "U".ToAsciiBytes();
                byte[] context  = tenant.Concat(endpoint).Concat(dcomId).Concat(rola).ToArray();

                var cmd = db.CreateCommand();
                cmd.CommandText = "SET CONTEXT_INFO @context";
                cmd.AddParam("context", context, System.Data.ParameterDirection.Input, System.Data.DbType.Binary);
                cmd.ExecuteNonQuery();

                var permissions = db.Select <string>(@"SELECT DISTINCT CONCAT(UPPER(r.ModulKod), '_', r.kod) as ModulePermissionCode
                                                              FROM cfe.V_RightUser r 
                                                              WHERE HasRight = 1 AND D_User_Id = @userid", new { userid = userId });
                ses.Roles = permissions;

                // SysAdmin budeme nastavovat tu, treba zabezpecit aby sa nedal nastavit z aplikacie ?
                ses.AdminLevel = ses.Roles.Any(x => x.Contains(AdminLevel.SysAdmin.ToDescription())) ?
                                 AdminLevel.SysAdmin :
                                 ses.Roles.Any(x => x.Contains("CFE_" + AdminLevel.CfeAdmin.ToDescription())) ?
                                 AdminLevel.CfeAdmin :
                                 AdminLevel.User;

                var(D_Tenant_Id_Externe, Nazov) = db.Single <(Guid?D_Tenant_Id_Externe, string Nazov)>("SELECT D_Tenant_Id_Externe, Nazov FROM cfe.D_Tenant WHERE D_Tenant_Id = @tenantId", new { tenantId = ses.TenantId });
                ses.D_Tenant_Id_Externe         = D_Tenant_Id_Externe;
                ses.TenantName           = Nazov;
                ses.OrsPermissions       = db.Query <string>("EXEC [cfe].[PR_GetOrsReadPermissions]").Join("");
                ses.OrsElementPermisions = new Dictionary <string, string>();

                var elPrava = db.Query <Tuple <int, int, byte> >($@"SELECT C_OrsElementType_Id as Item1, IdValue as Item2, PravoReal as Item3 
                                                                             FROM [cfe].V_OrsElementUser 
                                                                             WHERE IsElementPravo = 1 AND PravoReal > 0 AND D_User_Id = '{userId}'");
                foreach (var elPravo in elPrava)
                {
                    string dKey = $"ORS_{elPravo.Item1}_"; // {((elPravo.Item3 == 3)? "F" : ((elPravo.Item3 == 2)? "W" : "R"))}";

                    string oldString = "";
                    if (elPravo.Item3 == 3)
                    {
                        ses.OrsElementPermisions.TryGetValue(dKey + "F", out oldString);
                        if (string.IsNullOrEmpty(oldString))
                        {
                            oldString = ",";
                        }

                        ses.OrsElementPermisions[dKey + "F"] = oldString + elPravo.Item2 + ",";
                    }

                    if (elPravo.Item3 >= 2)
                    {
                        ses.OrsElementPermisions.TryGetValue(dKey + "W", out oldString);
                        if (string.IsNullOrEmpty(oldString))
                        {
                            oldString = ",";
                        }

                        ses.OrsElementPermisions[dKey + "W"] = oldString + elPravo.Item2 + ",";
                    }

                    if (elPravo.Item3 >= 1)
                    {
                        ses.OrsElementPermisions.TryGetValue(dKey + "R", out oldString);
                        if (string.IsNullOrEmpty(oldString))
                        {
                            oldString = ",";
                        }

                        ses.OrsElementPermisions[dKey + "R"] = oldString + elPravo.Item2 + ",";
                    }
                }
            }
        }