ilovesh
作者ilovesh·2010-07-15 20:36
tester·Pantosoft

为所有用户赋予所有能够得到的栏目

字数 7744阅读 1403评论 2赞 1

------------------------title:为所有用户赋予所有能够得到的栏目-----------------------

------------------------------需求描述------------------------------

--系统包含三个级别的用户,每一个级别的用户看到的栏目不同,每一个级别对应一类组织机构。

--在实际使用时,某一类组织机构下的某个机构中可能拥有多个账户,每个账户拥有不同的栏目。

--为了测试方便,现需要筛选出每一个级别下的所有组织机构用户,

--并为每一个账户赋予该级别用户所应拥有的全部栏目。

------------------------------脚本实现------------------------------

--第一步,在系统中为一个特定用户赋予所有权限,并通过以下脚本获取该用户模块的所有ID。

select t2.realname, t2.username, t3.caption, t1.catalogid

  from mvs_r_catalog_user t1

 inner join mvs_b_user t2 on t1.userid = t2.id

 inner join mvs_d_catalog t3 on t1.catalogid = t3.id

 where t2.username = 'username';

 

--第二步,删除省级用户原有的所有权限(依赖于4.3.7的账户),并使用使用第一步的特定账户验证测试。

delete from mvs_r_catalog_user t1

 where t1.userid in

       (select t.id

          from mvs_b_user t

         inner join mvs_b_organise_frame t1 on t.organise_frame_id = t1.id

                                           and t1.levels = 2

                                           and t.isvalid = 1

                                           and t.status = 1

                                           and t.rowid =

                                               (select max(rowid)

                                                  from mvs_b_user u

                                                 where t.organise_frame_id =

                                                       u.organise_frame_id));

                                                      

--第三步,为所有省级账户赋权(依赖于4.3.7的账户),并使用使用第一步的特定账户检查。

Declare

  --定义游标变量userid,其类型与用户表的id类型一致

  userid mvs_b_user.id%type;

  --定义游标cursor_getuserid

  cursor cursor_getuserid is

    select t.id

      from mvs_b_user t

      --将mvs_b_user表与mvs_b_organise_frame关联,

      --通过mvs_b_organise_frame的levels字段取得某一特定级别的用户

     inner join mvs_b_organise_frame t1 on t.organise_frame_id = t1.id

                                       and t1.levels = 2

                                       and t.isvalid = 1

                                       and t.status = 1

                                       --同一个organise_frame_id下,存在多个用户账户,此处

                                       --使用max(rowid)获取每个organise_frame_id下的一个账户

                                       and t.rowid =

                                           (select max(rowid)

                                              from mvs_b_user u

                                             where t.organise_frame_id =

                                                   u.organise_frame_id);

begin

  --打开游标

  open cursor_getuserid;

  --循环开始

  loop

    --获取游标值,并赋予userid变量

    fetch cursor_getuserid

      into userid;

    --在找到最后一个userid后结束

    exit when cursor_getuserid%notfound;

    --将获取到的userid插入用户权限表mvs_r_catalog_user,

    --其中catalogid为显示的值,即上述第一步获取到的值

    insert into mvs_r_catalog_user

      (id, catalogid, userid)

    values

      (seq_mvs_r_catalog_user.nextval, 34, userid);

  --循环结束   

  end loop;

  --关闭游标

  close cursor_getuserid;

end;

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/shwonder/archive/2010/07/15/5738095.aspx

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

1

添加新评论2 条评论

iloveshiloveshtesterPantosoft
2010-07-28 08:42
jarorwar: 看的有点晕,哈哈
基本上只有俺明白,呵呵。基本上这是个方便俺干活用的副本。

2010-07-27 19:11
看的有点晕,哈哈
Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广