WebApi自定义登录接口实现对当前组织的指定

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

WebApi自定义登录接口实现对当前组织的指定

说明:

1. 2021年3月份之后的补丁(包括3月份),在登录时要指定组织直接调用接口即可

1)系统封装的客户端调用ValidateLoginByOrgNumber方法

2)自定义客户端,调用服务端的ValidateUserByOrgNumber接口

2.  2019年06月27日之后的补丁(包括6月份)到2021年3月份之前的补丁,需要自定义Api接口,传入相应的组织,不需要对组织进行处理,调用下面的ValidateUserByOrg方法即可

3.  2019年06月27日之的补丁,需要调用下面完整代码来设置组织

4. 自定义接口参考:https://vip.kingdee.com/article/216280036993550080

代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using Kingdee.BOS.Authentication;
using Kingdee.BOS.WebApi.ServicesStub;
using Kingdee.BOS.ServiceFacade.KDServiceFx;
using Newtonsoft.Json;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Core.Permission;
namespace Kingdee.BOS.TestPlugIn.WebApi
{
    /// <summary>
    ///自定义登录接口
    /// </summary>
    public class CustomLogIn : AbstractWebApiBusinessService
    {
        public CustomLogIn(KDServiceContext context)
            : base(context)
        { }
 
        // <summary>
        ///实现带组织参数传入
            ///2019年06月27日之后(包括6月份)到2021年3月份之前的补丁,使用此方法
        /// </summary>
        public string ValidateUserByOrg(string acctID, string username, string password, int lcid = 2052, string orgNumber = null)
        {
            AuthService autuService = new AuthService(this.KDContext);
            LoginInfo loginInfo = new LoginInfo()
            {
                OrgNumber = orgNumber, // 2019年06月27日 补丁才有
                PasswordIsEncrypted = false,
                Username = username,
                AcctID = acctID,
                Password = password,
                AuthenticateType = AuthenticationType.PwdAuthentication,
                Lcid = lcid,
                KickoutFlag = 2  //1:踢人, 2:不踢人
            };
            LoginResult result =autuService.ValidateLoginInfo("", loginInfo);
            var jsonResult = JsonConvert.SerializeObject(result);
            return jsonResult;
        }
              
            // <summary>
        ///实现带组织参数传入
            ///2019年06月27日之前的补丁,使用此方法
        /// </summary>
        public string ValidateUserByOrg2(string acctID, string username, string password, int lcid = 2052, string orgNumber = null)
        {
            AuthService autuService = new AuthService(this.KDContext);
            LoginInfo loginInfo = new LoginInfo()
            {
                PasswordIsEncrypted = false,
                Username = username,
                AcctID = acctID,
                Password = password,
                AuthenticateType = AuthenticationType.PwdAuthentication,
                Lcid = lcid,
                KickoutFlag = 2  //1:踢人, 2:不踢人
            };
            LoginResult result =autuService.ValidateLoginInfo("", loginInfo);
                  this.SetCustomOrg(result,orgNumber)
            var jsonResult = JsonConvert.SerializeObject(result);
            return jsonResult;
        }
 
        /// <summary>
        /// 给上下文设置当前组织 //2019年06月27日 补丁之前才需要调用
        /// </summary>
        /// <param name="loginResult"></param>
        /// <param name="orgNumber"></param>
        private void SetCustomOrg(LoginResult loginResult, string orgNumber)
        {
            if (loginResult.IsSuccessByAPI && loginResult.Context != null)
            {
                var ctxnew = loginResult.Context;
                List<Organization> orgList = PermissionServiceHelper.GetUserOrg(ctxnew);
                if (!string.IsNullOrWhiteSpace(orgNumber))//1.如果客户端指定了组织,则使用指定的组织
                {
                    var defOrg = orgList.Where(t => t.Number.Equals(orgNumber)).FirstOrDefault();
                    if (defOrg != null)
                    {
                        ctxnew.CurrentOrganizationInfo = ConvertToOrganizationInfo(defOrg);
                        return;
                    }
                }
                string  lstLoginOrgId = UserParamterServiceHelper.Load(ctxnew, Core.WebApiConst.LoginOrgValue, ctxnew.UserId);
                if (!string.IsNullOrEmpty(lstLoginOrgId))
                {
                    var orgId = Convert.ToInt64(lstLoginOrgId);
                    if (orgList.Any(x => x.Id == orgId))
                    {
                        BusinessEntity.Organizations.Organization curOrg = OrganizationServiceHelper.ReadOrgInfoByOrgId(ctxnew, orgId);
                        ctxnew.CurrentOrganizationInfo = ConvertToOrganizationInfo2(curOrg);
                        return;
                    }
                }
                ctxnew.CurrentOrganizationInfo = ConvertToOrganizationInfo(orgList[0]);  //3.默认取第一个组织
            }
        }
 
       private OrganizationInfo ConvertToOrganizationInfo(Organization org)
        {
            return new OrganizationInfo()
            {
                ID = org.Id,
                Name = org.Name,
                FunctionIds = org.FunctionIds,
                AcctOrgType = org.AcctOrgType
            };
        }
        private OrganizationInfo ConvertToOrganizationInfo2(BusinessEntity.Organizations.Organization org)
        {
            List<long> functions = new List<long>();
            if (!string.IsNullOrEmpty(org.OrgFunctions))
            {
                functions = Array.ConvertAll(org.OrgFunctions.Split(','), (a) => { return Convert.ToInt64(a); }).ToList();
            }
            return new OrganizationInfo()
            {
                ID = org.Id,
                Name = org.Name,
                FunctionIds = functions,
                AcctOrgType = org.AcctOrgType
            };
        }
    }
}


WebApi自定义登录接口实现对当前组织的指定

说明:1. 2021年3月份之后的补丁(包括3月份),在登录时要指定组织直接调用接口即可1)系统封装的客户端调用ValidateLoginByOrgNumber方法...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息