给直接sql账表加基础资料数据权限原创
金蝶云社区-eris
eris
9人赞赏了该文章 2599次浏览 未经作者许可,禁止转载编辑于2021年06月19日 10:32:53

直接sql账表默认是没有数据权限,也无法通过业务授权给其设置基础资料权限,只能设置功能权限。如果一些关键字是基础资料又需要控制其权限,则可以通过插件给实现。

示例:把单据A中的部门基础资料数据范围权限适应到其对应的直接sql账表

  1. 单据A部门基础资料数据范围权限设计,部门的编码包含006

    image.png

  2. 单据A直接sql账表,包含部门基础资料关键字

    image.png

  3. 部门列表插件代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.ComponentModel;
using Kingdee.BOS.Contracts;
using Kingdee.BOS.Core.List.PlugIn.Args;
using Kingdee.BOS.Core.List.PlugIn;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.App.Data;
using Kingdee.BOS.Util;
using Kingdee.BOS.Core.Permission.Objects;
using Kingdee.BOS.Core.Permission;
 namespace Kingdee.BOS.TestPlugIn.ListPlugIn
{
    [HotUpdate]
    [Description("部门列表权限控制插件")]
    public class DirectSqlListPlugIn : AbstractListPlugIn
    {
        /// <summary>
        /// 创建sql构建参数后
        /// </summary>
        /// <param name="e"></param>
        public override void AfterCreateSqlBuilderParameter(SqlBuilderParameterArgs e)
        {
            base.AfterCreateSqlBuilderParameter(e);
            //this.view是部门列表的;this.View.ParentFormView 是过滤方案的view; this.View.ParentFormView.ParentFormView是直接sql帐表
            if (this.View.ParentFormView != null && this.View.ParentFormView.ParentFormView != null)
            {
                var sqlForm = this.View.ParentFormView.ParentFormView.BillBusinessInfo.GetForm();
                //直接sql帐表的表单Id
                if (sqlForm.Id == "k54306f8b1a4b45428fbe737e7a5ffe01")
                {
                    var billFormId = "KKK_BillA"; //取单据A中配置的部门数据权限
                    //构建数据规则过滤参数
                   DataRuleFilterParamenter filterParameter = new DataRuleFilterParamenter(billFormId, DataRuleFilterVersion.V2)
                    {
                        ParentFormId = billFormId,
                        PermissionItemId = PermissionConst.View,
                        BusinessInfo = this.View.BillBusinessInfo,
                        IsLookUp = true,
                        IsEnabledObjectDRInLookUp = true,
                        IsSupportSqlParam = true,
                    };
                    //得到单据A部门数据规则过滤对象
                    DataRuleFilterObject filterObject = PermissionServiceHelper.LoadDataRuleFilter(this.Context, filterParameter);
                    //过滤对象的过滤字符串传给部门列表sql构建参数
                    e.sqlBuilderParameter.DataRuleFilterString =   e.sqlBuilderParameter.DataRuleFilterString.JoinFilterString(filterObject.FilterString);
                }
            }
        }
    }
}


   4. 上面列表插件注册到部门列表插件中

image.png

   5. 运行结果,选择部门职能看到编码包含006的数据

image.png


赞 9