コード例 #1
0
        private static void UpdateOrInsert(
            string loginId, DirectoryEntry entry, ParameterAccessor.Parts.Ldap ldap)
        {
            var deptCode    = entry.Property(ldap.LdapDeptCode, ldap.LdapDeptCodePattern);
            var deptName    = entry.Property(ldap.LdapDeptName, ldap.LdapDeptNamePattern);
            var deptExists  = !deptCode.IsNullOrEmpty() && !deptName.IsNullOrEmpty();
            var userCode    = entry.Property(ldap.LdapUserCode, ldap.LdapUserCodePattern);
            var name        = Name(loginId, entry, ldap);
            var mailAddress = entry.Property(ldap.LdapMailAddress, ldap.LdapMailAddressPattern);
            var statements  = new List <SqlStatement>();

            if (deptExists)
            {
                statements.Add(Rds.UpdateOrInsertDepts(
                                   param: Rds.DeptsParam()
                                   .TenantId(ldap.LdapTenantId)
                                   .DeptCode(deptCode)
                                   .DeptName(deptName),
                                   where : Rds.DeptsWhere().DeptCode(deptCode)));
            }
            statements.Add(Rds.UpdateOrInsertUsers(
                               param: Rds.UsersParam()
                               .TenantId(ldap.LdapTenantId)
                               .LoginId(loginId)
                               .UserCode(userCode)
                               .Name(name)
                               .DeptId(
                                   sub: Rds.SelectDepts(
                                       column: Rds.DeptsColumn().DeptId(),
                                       where : Rds.DeptsWhere().DeptCode(deptCode)),
                                   _using: deptExists)
                               .DeptId(0, _using: !deptExists),
                               where : Rds.UsersWhere().LoginId(loginId)));
            if (!mailAddress.IsNullOrEmpty())
            {
                statements.Add(Rds.PhysicalDeleteMailAddresses(
                                   where : Rds.MailAddressesWhere()
                                   .OwnerType("Users")
                                   .OwnerId(sub: Rds.SelectUsers(
                                                column: Rds.UsersColumn().UserId(),
                                                where : Rds.UsersWhere().LoginId(loginId)))));
                statements.Add(Rds.InsertMailAddresses(
                                   param: Rds.MailAddressesParam()
                                   .OwnerId(sub: Rds.SelectUsers(
                                                column: Rds.UsersColumn().UserId(),
                                                where : Rds.UsersWhere().LoginId(loginId)))
                                   .OwnerType("Users")
                                   .MailAddress(mailAddress)));
            }
            statements.Add(StatusUtilities.UpdateStatus(
                               StatusUtilities.Types.DeptsUpdated,
                               tenantId: ldap.LdapTenantId));
            statements.Add(StatusUtilities.UpdateStatus(
                               StatusUtilities.Types.UsersUpdated,
                               tenantId: ldap.LdapTenantId));
            Rds.ExecuteNonQuery(
                transactional: true,
                statements: statements.ToArray());
        }
コード例 #2
0
 public Error.Types PhysicalDelete(
     SiteSettings ss, Sqls.TableTypes tableType = Sqls.TableTypes.Normal)
 {
     Rds.ExecuteNonQuery(
         transactional: true,
         statements: Rds.PhysicalDeleteDepts(
             tableType: tableType,
             param: Rds.DeptsParam().DeptId(DeptId)));
     return(Error.Types.None);
 }
コード例 #3
0
 public ErrorData PhysicalDelete(
     Context context, SiteSettings ss, Sqls.TableTypes tableType = Sqls.TableTypes.Normal)
 {
     Rds.ExecuteNonQuery(
         context: context,
         transactional: true,
         statements: Rds.PhysicalDeleteDepts(
             tableType: tableType,
             param: Rds.DeptsParam().DeptId(DeptId)));
     return(new ErrorData(type: Error.Types.None));
 }
コード例 #4
0
 /// <summary>
 /// Fixed:
 /// </summary>
 private static void InitializeDepts(DemoModel demoModel, Dictionary <string, long> idHash)
 {
     Def.DemoDefinitionCollection
     .Where(o => o.Type == "Depts")
     .ForEach(demoDefinition =>
              idHash.Add(demoDefinition.Id, Rds.ExecuteScalar_long(statements:
                                                                   Rds.InsertDepts(
                                                                       selectIdentity: true,
                                                                       param: Rds.DeptsParam()
                                                                       .TenantId(demoModel.TenantId)
                                                                       .DeptCode(demoDefinition.ClassA)
                                                                       .DeptName(demoDefinition.Title)
                                                                       .CreatedTime(demoDefinition.CreatedTime.DemoTime(demoModel))
                                                                       .UpdatedTime(demoDefinition.UpdatedTime.DemoTime(demoModel))))));
 }
コード例 #5
0
        private static void UpdateOrInsert(string loginId, DirectoryEntry entry)
        {
            var deptCode    = entry.Property(Parameters.Authentication.LdapDeptCode);
            var deptName    = entry.Property(Parameters.Authentication.LdapDeptName);
            var userCode    = entry.Property(Parameters.Authentication.LdapUserCode);
            var firstName   = entry.Property(Parameters.Authentication.LdapFirstName);
            var lastName    = entry.Property(Parameters.Authentication.LdapLastName);
            var mailAddress = entry.Property(Parameters.Authentication.LdapMailAddress);

            Rds.ExecuteNonQuery(statements: new SqlStatement[]
            {
                Rds.UpdateOrInsertDepts(
                    param: Rds.DeptsParam()
                    .TenantId(Parameters.Authentication.LdapTenantId)
                    .DeptCode(deptCode)
                    .DeptName(deptName),
                    where : Rds.DeptsWhere().DeptCode(deptCode)),
                Rds.UpdateOrInsertUsers(
                    param: Rds.UsersParam()
                    .TenantId(Parameters.Authentication.LdapTenantId)
                    .LoginId(loginId)
                    .UserCode(userCode)
                    .Name(lastName + " " + firstName)
                    .DeptId(sub: Rds.SelectDepts(
                                column: Rds.DeptsColumn().DeptId(),
                                where : Rds.DeptsWhere().DeptCode(deptCode))),
                    where : Rds.UsersWhere().LoginId(loginId)),
                Rds.UpdateOrInsertMailAddresses(
                    param: Rds.MailAddressesParam()
                    .OwnerId(sub: Rds.SelectUsers(
                                 column: Rds.UsersColumn().UserId(),
                                 where : Rds.UsersWhere().LoginId(loginId)))
                    .OwnerType("Users")
                    .MailAddress(mailAddress),
                    where : Rds.MailAddressesWhere()
                    .OwnerType("Users")
                    .OwnerId(sub: Rds.SelectUsers(
                                 column: Rds.UsersColumn().UserId(),
                                 where : Rds.UsersWhere().LoginId(loginId))))
            });
        }
コード例 #6
0
        public static void UpdateOrInsert(
            Context context,
            int tenantId,
            string loginId,
            string name,
            string mailAddress,
            DateTime synchronizedTime,
            SamlAttributes attributes)
        {
            var deptCode     = attributes[nameof(UserModel.DeptCode)];
            var deptName     = attributes[nameof(UserModel.Dept)];
            var deptSettings = !deptCode.IsNullOrEmpty() &&
                               !deptName.IsNullOrEmpty();
            var isEmptyDeptCode = deptCode == string.Empty;
            var user            = new UserModel().Get(
                context: context,
                ss: null,
                where: Rds.UsersWhere()
                .TenantId(tenantId)
                .LoginId(loginId)
                .Name(name)
                .TenantManager(
                    attributes.TenantManager,
                    _using: attributes[nameof(UserModel.TenantManager)] != null)
                .FirstName(
                    attributes[nameof(UserModel.FirstName)],
                    _using: attributes[nameof(UserModel.FirstName)] != null)
                .LastName(
                    attributes[nameof(UserModel.LastName)],
                    _using: attributes[nameof(UserModel.LastName)] != null)
                .FirstAndLastNameOrder(
                    attributes[nameof(UserModel.FirstAndLastNameOrder)],
                    _using: attributes[nameof(UserModel.FirstAndLastNameOrder)] != null)
                .UserCode(
                    attributes[nameof(UserModel.UserCode)],
                    _using: attributes[nameof(UserModel.UserCode)] != null)
                .Birthday(
                    attributes[nameof(UserModel.Birthday)],
                    _using: attributes[nameof(UserModel.Birthday)] != null)
                .Gender(
                    attributes[nameof(UserModel.Gender)],
                    _using: attributes[nameof(UserModel.Gender)] != null)
                .Language(
                    attributes[nameof(UserModel.Language)],
                    _using: attributes[nameof(UserModel.Language)] != null)
                .TimeZone(
                    attributes[nameof(UserModel.TimeZone)],
                    _using: attributes[nameof(UserModel.TimeZone)] != null)
                .DeptId(
                    sub: Rds.SelectDepts(
                        column: Rds.DeptsColumn().DeptId(),
                        where : Rds.DeptsWhere().DeptCode(deptCode)),
                    _using: deptSettings)
                .Body(
                    attributes[nameof(UserModel.Body)],
                    _using: attributes[nameof(UserModel.Body)] != null));

            if (!isEmptyDeptCode &&
                user.AccessStatus == Databases.AccessStatuses.Selected)
            {
                if (mailAddress.IsNullOrEmpty())
                {
                    return;
                }
                var addressCount = Rds.ExecuteScalar_long(
                    context: context,
                    statements: new[]
                {
                    Rds.SelectMailAddresses(
                        dataTableName: "Count",
                        column: Rds.MailAddressesColumn().MailAddressesCount(),
                        where : Rds.MailAddressesWhere()
                        .OwnerType("Users")
                        .OwnerId(sub: Rds.SelectUsers(
                                     column: Rds.UsersColumn().UserId(),
                                     where : Rds.UsersWhere().LoginId(loginId)))
                        .MailAddress(mailAddress))
                });
                if (addressCount > 0)
                {
                    return;
                }
            }
            var statements = new List <SqlStatement>();

            if (deptSettings)
            {
                statements.Add(Rds.UpdateOrInsertDepts(
                                   param: Rds.DeptsParam()
                                   .TenantId(tenantId)
                                   .DeptCode(deptCode)
                                   .DeptName(deptName),
                                   where : Rds.DeptsWhere().DeptCode(deptCode)));
            }
            var param = Rds.UsersParam()
                        .TenantId(tenantId)
                        .LoginId(loginId)
                        .Name(name)
                        .TenantManager(attributes.TenantManager,
                                       _using: attributes[nameof(UserModel.TenantManager)] != null)
                        .SynchronizedTime(synchronizedTime)
                        .FirstName(
                attributes[nameof(UserModel.FirstName)],
                _using: attributes[nameof(UserModel.FirstName)] != null)
                        .LastName(
                attributes[nameof(UserModel.LastName)],
                _using: attributes[nameof(UserModel.LastName)] != null)
                        .FirstAndLastNameOrder(
                attributes[nameof(UserModel.FirstAndLastNameOrder)],
                _using: attributes[nameof(UserModel.FirstAndLastNameOrder)] != null)
                        .UserCode(
                attributes[nameof(UserModel.UserCode)],
                _using: attributes[nameof(UserModel.UserCode)] != null)
                        .DeptId(
                sub: Rds.SelectDepts(
                    column: Rds.DeptsColumn().DeptId(),
                    where : Rds.DeptsWhere().DeptCode(deptCode)),
                _using: deptSettings)
                        .DeptId(0, _using: isEmptyDeptCode)
                        .Birthday(
                attributes[nameof(UserModel.Birthday)],
                _using: attributes[nameof(UserModel.Birthday)] != null)
                        .Gender(
                attributes[nameof(UserModel.Gender)],
                _using: attributes[nameof(UserModel.Gender)] != null)
                        .Language(
                attributes[nameof(UserModel.Language)],
                _using: attributes[nameof(UserModel.Language)] != null)
                        .TimeZone(
                attributes[nameof(UserModel.TimeZone)],
                _using: attributes[nameof(UserModel.TimeZone)] != null)
                        .Body(
                attributes[nameof(UserModel.Body)],
                _using: attributes[nameof(UserModel.Body)] != null);

            statements.Add(Rds.UpdateOrInsertUsers(
                               param: param,
                               where : Rds.UsersWhere().TenantId(tenantId).LoginId(loginId),
                               addUpdatorParam: true,
                               addUpdatedTimeParam: true));
            if (!mailAddress.IsNullOrEmpty())
            {
                statements.Add(Rds.PhysicalDeleteMailAddresses(
                                   where : Rds.MailAddressesWhere()
                                   .OwnerType("Users")
                                   .OwnerId(sub: Rds.SelectUsers(
                                                column: Rds.UsersColumn().UserId(),
                                                where : Rds.UsersWhere().LoginId(loginId)))));
                statements.Add(Rds.InsertMailAddresses(
                                   param: Rds.MailAddressesParam()
                                   .OwnerId(sub: Rds.SelectUsers(
                                                column: Rds.UsersColumn().UserId(),
                                                where : Rds.UsersWhere().LoginId(loginId)))
                                   .OwnerType("Users")
                                   .MailAddress(mailAddress)));
            }
            statements.Add(StatusUtilities.UpdateStatus(
                               tenantId: tenantId, type: StatusUtilities.Types.DeptsUpdated));
            statements.Add(StatusUtilities.UpdateStatus(
                               tenantId: tenantId, type: StatusUtilities.Types.UsersUpdated));
            Rds.ExecuteNonQuery(
                context: context,
                transactional: true,
                statements: statements.ToArray());
        }
コード例 #7
0
        private static void UpdateOrInsert(
            Context context,
            string loginId,
            string deptCode,
            string deptName,
            string userCode,
            string name,
            string mailAddress,
            List <KeyValuePair <LdapExtendedAttribute, string> > attributes,
            ParameterAccessor.Parts.Ldap ldap,
            DateTime synchronizedTime)
        {
            var deptExists   = !deptCode.IsNullOrEmpty() && !deptName.IsNullOrEmpty();
            var deptSettings = !ldap.LdapDeptCode.IsNullOrEmpty() && !ldap.LdapDeptName.IsNullOrEmpty();
            var statements   = new List <SqlStatement>();

            if (deptExists)
            {
                statements.Add(Rds.UpdateOrInsertDepts(
                                   param: Rds.DeptsParam()
                                   .TenantId(ldap.LdapTenantId)
                                   .DeptCode(deptCode)
                                   .DeptName(deptName),
                                   where : Rds.DeptsWhere().DeptCode(deptCode)));
            }
            var exists = Rds.ExecuteScalar_int(
                context: context,
                statements: Rds.SelectUsers(
                    column: Rds.UsersColumn().UsersCount(),
                    where : Rds.UsersWhere().LoginId(
                        value: context.Sqls.EscapeValue(loginId),
                        _operator: context.Sqls.LikeWithEscape))) == 1;
            var param = Rds.UsersParam()
                        .TenantId(ldap.LdapTenantId)
                        .LoginId(loginId, _using: !exists)
                        .UserCode(userCode)
                        .Name(name)
                        .DeptId(
                sub: Rds.SelectDepts(
                    column: Rds.DeptsColumn().DeptId(),
                    where : Rds.DeptsWhere().DeptCode(deptCode)),
                _using: deptExists)
                        .DeptId(0, _using: deptSettings && !deptExists)
                        .LdapSearchRoot(ldap.LdapSearchRoot)
                        .SynchronizedTime(synchronizedTime);

            attributes?.ForEach(attributeAndName =>
                                param.Add(
                                    $"\"Users\".\"{attributeAndName.Key.ColumnName}\"",
                                    attributeAndName.Key.ColumnName,
                                    attributeAndName.Value));
            statements.Add(Rds.UpdateOrInsertUsers(
                               param: param,
                               where : Rds.UsersWhere().LoginId(
                                   value: context.Sqls.EscapeValue(loginId),
                                   _operator: context.Sqls.LikeWithEscape),
                               addUpdatorParam: false,
                               addUpdatedTimeParam: false));
            if (!mailAddress.IsNullOrEmpty())
            {
                statements.Add(Rds.PhysicalDeleteMailAddresses(
                                   where : Rds.MailAddressesWhere()
                                   .OwnerType("Users")
                                   .OwnerId(sub: Rds.SelectUsers(
                                                column: Rds.UsersColumn().UserId(),
                                                where : Rds.UsersWhere().LoginId(
                                                    value: context.Sqls.EscapeValue(loginId),
                                                    _operator: context.Sqls.LikeWithEscape)))));
                statements.Add(Rds.InsertMailAddresses(
                                   param: Rds.MailAddressesParam()
                                   .OwnerId(sub: Rds.SelectUsers(
                                                column: Rds.UsersColumn().UserId(),
                                                where : Rds.UsersWhere().LoginId(
                                                    value: context.Sqls.EscapeValue(loginId),
                                                    _operator: context.Sqls.LikeWithEscape)))
                                   .OwnerType("Users")
                                   .MailAddress(mailAddress)));
            }
            var ss = new SiteSettings();

            statements.Add(StatusUtilities.UpdateStatus(
                               tenantId: ldap.LdapTenantId, type: StatusUtilities.Types.DeptsUpdated));
            statements.Add(StatusUtilities.UpdateStatus(
                               tenantId: ldap.LdapTenantId, type: StatusUtilities.Types.UsersUpdated));
            Repository.ExecuteNonQuery(
                context: context,
                transactional: true,
                statements: statements.ToArray());
        }
コード例 #8
0
ファイル: Ldap.cs プロジェクト: wagatsumaw/Implem.Pleasanter
        private static void UpdateOrInsert(
            Context context,
            string loginId,
            SearchResult result,
            ParameterAccessor.Parts.Ldap ldap,
            DateTime synchronizedTime)
        {
            var deptCode = result.Property(
                context: context,
                name: ldap.LdapDeptCode,
                pattern: ldap.LdapDeptCodePattern);
            var deptName = result.Property(
                context: context,
                name: ldap.LdapDeptName,
                pattern: ldap.LdapDeptNamePattern);
            var deptExists   = !deptCode.IsNullOrEmpty() && !deptName.IsNullOrEmpty();
            var deptSettings = !ldap.LdapDeptCode.IsNullOrEmpty() && !ldap.LdapDeptName.IsNullOrEmpty();
            var userCode     = result.Property(
                context: context,
                name: ldap.LdapUserCode,
                pattern: ldap.LdapUserCodePattern);
            var name = Name(
                context: context,
                loginId: loginId,
                result: result,
                ldap: ldap);
            var mailAddress = result.Property(
                context: context,
                name: ldap.LdapMailAddress,
                pattern: ldap.LdapMailAddressPattern);
            var statements = new List <SqlStatement>();

            if (deptExists)
            {
                statements.Add(Rds.UpdateOrInsertDepts(
                                   param: Rds.DeptsParam()
                                   .TenantId(ldap.LdapTenantId)
                                   .DeptCode(deptCode)
                                   .DeptName(deptName),
                                   where : Rds.DeptsWhere().DeptCode(deptCode)));
            }
            var param = Rds.UsersParam()
                        .TenantId(ldap.LdapTenantId)
                        .LoginId(loginId)
                        .UserCode(userCode)
                        .Name(name)
                        .DeptId(
                sub: Rds.SelectDepts(
                    column: Rds.DeptsColumn().DeptId(),
                    where : Rds.DeptsWhere().DeptCode(deptCode)),
                _using: deptExists)
                        .DeptId(0, _using: deptSettings && !deptExists)
                        .LdapSearchRoot(ldap.LdapSearchRoot)
                        .SynchronizedTime(synchronizedTime);

            ldap.LdapExtendedAttributes?.ForEach(attribute =>
                                                 param.Add(
                                                     $"[Users].[{attribute.ColumnName}]",
                                                     attribute.ColumnName,
                                                     result.Property(
                                                         context: context,
                                                         name: attribute.Name,
                                                         pattern: attribute.Pattern)));
            statements.Add(Rds.UpdateOrInsertUsers(
                               param: param,
                               where : Rds.UsersWhere().LoginId(loginId),
                               addUpdatorParam: false,
                               addUpdatedTimeParam: false));
            if (!mailAddress.IsNullOrEmpty())
            {
                statements.Add(Rds.PhysicalDeleteMailAddresses(
                                   where : Rds.MailAddressesWhere()
                                   .OwnerType("Users")
                                   .OwnerId(sub: Rds.SelectUsers(
                                                column: Rds.UsersColumn().UserId(),
                                                where : Rds.UsersWhere().LoginId(loginId)))));
                statements.Add(Rds.InsertMailAddresses(
                                   param: Rds.MailAddressesParam()
                                   .OwnerId(sub: Rds.SelectUsers(
                                                column: Rds.UsersColumn().UserId(),
                                                where : Rds.UsersWhere().LoginId(loginId)))
                                   .OwnerType("Users")
                                   .MailAddress(mailAddress)));
            }
            var ss = new SiteSettings();

            statements.Add(StatusUtilities.UpdateStatus(
                               tenantId: ldap.LdapTenantId, type: StatusUtilities.Types.DeptsUpdated));
            statements.Add(StatusUtilities.UpdateStatus(
                               tenantId: ldap.LdapTenantId, type: StatusUtilities.Types.UsersUpdated));
            Rds.ExecuteNonQuery(
                context: context,
                transactional: true,
                statements: statements.ToArray());
        }