欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

存储过程之权限复制

程序员文章站 2022-04-23 08:36:45
...

CREATE OR REPLACE PROCEDURE "P_PERMISSION_COPY"

(

  V_FROM_RES_ID VARCHAR2,

  V_TO_RES_ID   VARCHAR2,

  V_RETCODE     OUT VARCHAR2,

  V_RETINFO     OUT VARCHAR2

) IS

  /* ------------------------------------------------

   *名称 --%@NAME:  权限管理-角色赋权 复制 v_from_res_id 权限到 v_to_res_id

   *功能描述 --%@COMMENT:  权限管理

   *参数 --%@PARAM:v_from_res_id    

   *参数 --%@PARAM:v_to_res_id     

   *参数 --%@PARAM:V_RETCODE     过程执行返回参数

   *参数 --%@PARAM:V_RETINFO     过程执行错误日志

   *创建人 --%@CREATOR:admin

   *创建时间 --%@CREATED_TIME:

   *备注 --%@REMARK:

   *修改记录 --%@MODIFY:

  -------------------------------------------------*/

 

  V_USERNAME  VARCHAR2(40);

  V_PROCDESC  VARCHAR2(40);

  V_PROCNAME  VARCHAR2(40);

  V_TELE_TYPE VARCHAR2(10);

  V_ROW_NUM   NUMBER;

 

  V_RES_ID   VARCHAR2(30);

  V_SQL      VARCHAR2(1000);

  V_COUNT    NUMBER;

 

  BEGIN

  V_USERNAME  := 'HN_DSS'; --用户名

  V_PROCDESC  := '权限管理'; --过程描述

  V_PROCNAME  := 'P_PURE_USER_PERMISSION'; --过程名

  V_TELE_TYPE := 'ALL'; --网别

  V_ROW_NUM   := 0;

 

  

  -- 获取资源角色权限

  FOR CC_ROLE IN (SELECT *

         FROM HN_DSS.PURE_ROLE_PERMISSION T

         WHERE T.RESOURCES_ID = V_FROM_RES_ID) LOOP

  --先判断该角色是否已有该资源权限

  SELECT COUNT(1)

      INTO V_COUNT

      FROM HN_DSS.PURE_ROLE_PERMISSION A

     WHERE A.ROLE_ID = CC_ROLE.ROLE_ID

       AND A.RESOURCES_ID = V_TO_RES_ID;

  --没有 复制权限

  IF V_COUNT <= 0 THEN

     INSERT INTO HN_DSS.PURE_ROLE_PERMISSION

      (ROLE_ID,

       RESOURCES_ID,

       AUTH_CREATE,

       AUTH_READ,

       AUTH_UPDATE,

       AUTH_DELETE)

     SELECT CC_ROLE.ROLE_ID, V_TO_RES_ID, 0, 1, 0, 0 FROM DUAL;

     V_ROW_NUM := V_ROW_NUM + 1;

     --每复制100条 提交

     IF V_ROW_NUM >= 100 THEN

        COMMIT;

        V_ROW_NUM := 0;

     END IF;

   END IF;

  END LOOP;

  --获取资源用户权限

  FOR CC_USER_PERMISSION IN (SELECT *

       FROM HN_DSS.PURE_USER_PERMISSION T

      WHERE T.RESOURCES_ID = V_FROM_RES_ID) LOOP

   --判断该用户是否已有该资源权限

    SELECT COUNT(1)

      INTO V_COUNT

      FROM HN_DSS.PURE_USER_PERMISSION A

     WHERE A.USER_ID = CC_USER_PERMISSION.USER_ID

       AND A.RESOURCES_ID = V_TO_RES_ID;

   --没有 复制权限

    IF V_COUNT <= 0 THEN

      INSERT INTO HN_DSS.PURE_USER_PERMISSION

        (USER_ID,

         RESOURCES_ID,

         AUTH_CREATE,

         AUTH_READ,

         AUTH_UPDATE,

         AUTH_DELETE)

        SELECT CC_USER_PERMISSION.USER_ID,

               V_TO_RES_ID RESOURCES_ID,

               0,

               1,

               0,

               0

          FROM DUAL;

      V_ROW_NUM := V_ROW_NUM + 1;

     --每复制100条 提交

      IF V_ROW_NUM >= 100 THEN

        COMMIT;

        V_ROW_NUM := 0;

      END IF;

   END IF;

  END LOOP;

  --最后不满100条 提交

  COMMIT;

  V_RETCODE := 'SUCCESS';

  

  EXCEPTION

        WHEN OTHERS THEN

    V_RETCODE := 'FAIL';

    V_RETINFO := SQLERRM;

END P_PURE_USER_PERMISSION;