存储过程之权限复制

2018-01-31 11:01:15来源:http://zhuqinglin.iteye.com作者:zhuqinglin人点击

分享

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;

 

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台