前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实例:ABAP权限对象设计与权限检查的实现(详细)

实例:ABAP权限对象设计与权限检查的实现(详细)

作者头像
matinal
发布2020-11-27 17:19:02
1.6K0
发布2020-11-27 17:19:02
举报
文章被收录于专栏:SAP TechnicalSAP Technical

创建权限对象,使分配这个权限的用户只能操作部门编号(edept)为 ‘10’ 的数据。

1. SU20,创建权限字段

2. SU21,创建权限对象

  1.首先创建对象类,输入对象类名称(ZEM1)、文本(FOR TEST),点击“保存”

2.找到之前创建的对象类,可以鼠标右键创建权限对象

3. SU02,创建参数文件,输入相关信息激活

对象输入:ZEMPOBJ00

权限输入:ZDEPT,并双击它新建一个权限

具体的权限值(点击“维护值”)

激活!

  该授权对象包含两个字段。可以在第一个字段 EMPDEPT 中输入一 般值 ‘10’,第二个字段 ACTVT 中,在创建(01)、更改(02)和显示(03)之间进行选择,也就是

说,分配这个参数文件的用户,只能对 ‘10’ 部门的数据进行01、02、03操作。

也可以设置为“*”这样任何操作都可以通过。

到此,su01,进入‘参数文件’选项卡,添加参数文件:ZEMPRF00,保存后权限即可生效,对用户分配权限还可以通过创建role的方式,以下。

  PS:有两种方式,创建role分配给用户,或者直接将参数文件分配给用户,role是从业务层面的维度来管理权限,但实质上的功能还是由profile 来完成的。 原来sap的权限是没有role这个概念的。全部是由profile/object 的方式来实现的,但这样的方式要求对权限底层的具体细节非常了解才行,严重影响的工作效率,而且不利于只懂业务的人进行权限管理和设计。所以sap后来引入了role这样一个概念,试图通过自顶向下的方式让用户来管理权限。通过tcode pfcg 可以维护role。

4.创建role将权限分配给用户

1.PFCG 创建角色:ZEMPR00,输入描述文本,点击创建,点击“权限”选项卡,参数文件名称:点击(系统建议的),点‘更改授权数据’->‘手动,

输入授权对象:ZEMPOBJ00,回车,保存

然后指定权限的值

2.进入‘用户’选项卡,输入用户名为自己的用户名;记得‘用户比较'(用户比较,完成权限修改后与用户的权限保持一致)

到此为止,权限的设计全部完成,下面我们通过ABAP来验证权限的有效性。

权限列表中有两个权限,一个是系统通过创建role生成的,一个是我们手动创建的。

5. 创建ABAP程序,来验证权限对象的有效性

代码如下:::

1 REPORT ZHAIM_TEST01 NO STANDARD PAGE HEADING. 2 3 TABLES ZEMP_TEST. 4 5 DATA: IT_ZEMP TYPE STANDARD TABLE OF ZEMP_TEST, 6 IW_ZEMP TYPE ZEMP_TEST. 7 8 PARAMETERS P_DEPT TYPE ZEMP_TEST-EDEPT. 9 10 START-OF-SELECTION. 11 12 AUTHORITY-CHECK OBJECT 'ZEMPOBJ00' 13 ID 'ZEMPDEPT' FIELD P_DEPT 14 ID 'ACTVT' FIELD '03'. 15 "用户使用程序,想要查询部门的员工信息, 16 "通过authority-check object 来进行权限检查,ID是字段名,field是要检查的 17 "'actvt': 01 创建,02更改,03查询,06删除 18 IF SY-SUBRC <> 0. 19 MESSAGE S001(00) WITH '您没有权限查看此数据' DISPLAY LIKE 'E'. 20 ELSE. 21 22 SELECT * 23 FROM ZEMP_TEST 24 INTO TABLE IT_ZEMP 25 WHERE EDEPT = P_DEPT. 26 27 28 LOOP AT IT_ZEMP INTO IW_ZEMP. 29 30 WRITE / IW_ZEMP. 31 32 ENDLOOP. 33 34 ENDIF.

复制代码
复制代码

输入20

执行结果:

输入10

执行结果

如果存在删除操作,在删除前,检查用户的权限,可以将actvt的值改为06进行测试。

actvt的所有值储存在表TACT中。

---------------------------------------- | ACTVT|LTEXT | ---------------------------------------- | 01 |创建或生成 | | 02 |更改 | | 03 |显示 | | 04 |打印、编辑消息 | | 05 |锁定 | | 06 |删除 | | 07 |激活,生成 | | 08 |Display change documents | | 09 |显示价格 | | 10 |过帐 | | 11 |修改数值范围状态 | | 12 |维护并生成修改文档 | | 13 |初始化数量级别 | | 14 |字段选择: 生成屏幕 | | 15 |字段选择: 赋值表 | | 16 |执行 | | 17 |维护编号范围对象 | | 18 |从 coll. 程序交货 | | 19 |coll. proc 的发票 | | 20 |无翻译传输 | | 21 |传输 | | 22 |输入,包括, 分配 | | 23 |维护 | | 24 |归档 | | 25 |Reload | | 26 |修改客户帐号组 | | 27 |Display totals records | | 28 |显示行项目 | | 29 |显示存储数据 | | 30 |决定 | | 31 |确认 | | 32 |保存 | | 33 |读 | | 34 |写 | | 35 |输出 | | 36 |扩展维护 | | 37 |接受 | | 38 |完成 | | 39 |检查 | | 40 |在 DB 中创建 | | 41 |在 DB 中删除 | | 42 |转换到 DB | | 43 |释放 | | 44 |标记 | | 45 |允许 | | 46 |Merge | | 47 |借位 | | 48 |模拟 | | 49 |请求 | | 50 |移动 | | 51 |Initialize | | 52 |修改应用程序开始 | | 53 |显示应用开始 | | 54 |显示应用档案 | | 55 |修改应用程序归档 | | 56 |显示档案 | | 57 |保存档案 | | 58 |显示接管 | | 59 |分配 | | 60 |输入 | | 61 |输出 | | 62 |创建自动分帐目 | | 63 |激活 | | 64 |生成 | | 65 |重新组织 | | 66 |刷新 | | 67 |翻译 | | 68 |模块 | | 69 |放弃 | | 70 |管理员 | | 71 |分析 | | 72 |计划 | | 73 |Execute Digital Signature | | 74 |撤回批准 | | 75 |移去 | | 76 |输入 | | 77 |预输入 | | 78 |分配 | | 79 |Assign Role to Composite Role | | 80 |Print | | 81 |调度 | | 82 |补充 | | 83 |对方确认 | | 84 |结算 | | 85 |转换 | | 86 |Rebook | | 87 |返回 | | 88 |完成 | | 89 |Subscribe | | 90 |复制 | | 91 |重新激活 | | 92 |Create from Template | | 93 |计算 | | 94 |Override | | 95 |解锁 | | 96 |Reject | | 97 |设置 | | 98 |下达标记 | | 99 |生成发票清单 | | A1 |Accrue | | A2 |工资 | | A3 |修改状态 | | A4 |重新提交 | | A5 |显示报表 | | A6 |用筛选器读取 | | A7 |用筛选器写入 | | A8 |处理大量数据 | | A9 |发送 | | AA |Print Again | | AB |结算 | | B1 |显示许可值 | | B2 |技术性完成 | | B3 |导出 | | B8 |再次执行 | | B9 |Post Parked Document | | BD |维护对象在非属主系统 | | BE |IMG 项目 | | C1 |支付卡维护 | | C2 |支付卡显示 | | C3 |手工权限维护 | | C4 |Develope Payment Card | | C5 |Reopen | | C8 |确认更改 | | D1 |复制 | | DL |下载 | | DP |删除计划 | | E0 |保存摘录 | | E6 |删除自有摘录 | | E7 |删除文本摘录 | | EP |Prioritise extract | | FP |修改客户自动选项 | | G1 |Maintain Budget | | G2 |Billing | | G3 |Maintain Overhead Costs | | G4 |Maintain Reevaluation | | G5 |Park | | G6 |Transfer Budget | | G7 |Reverse | | GL |一般总览 | | H1 |Deactivate | | H2 |Activate Logging | | H3 |Deactivate Logging | | KA |激活布告 | | KI |Knock In | | KO |Knock Out | | KS |冲销布告 | | KU |Give notice | | L0 |All functions | | L1 |函数范围级 1 | | L2 |函数范围级 2 | | LM |Change LDAP Mapping | | LS |Change LDAP Sync. Switch | | MA |Deactivate mod.assistant | | P0 |Accept CCMS CSM data | | P1 |Edit CCMS CSM data | | P2 |Maintain CCMS CSM methods | | P3 |Register CCMS CSM remote systm| | PA |Open period | | PB |Close period | | PC |Open Consolid. Grp Processing | | PD |Close Consolid. Unit Processng| | PP |Set as productive | | PU |Publish | | RS |Send to New Recipient | | S1 |编辑模板 | | S2 |Edit specification | | SO |Edit in Sourcing | | SZ |Assign Switch Framework Switch| | U2 |比较业务量 | | U3 |更改业务量比较 | | U4 |添加业务量数据 | | UL |上载 | | V1 |Create version | | V2 |Change Version | | V3 |Display Version | | V4 |Delete Version | | V5 |Transport Version | | V6 |Delete Version Header | | VE |Create an Enhancement ID | | VF |Expired | ----------------------------------------

PS: AUTHORITY-CHECK OBJECT 'ZEMPOBJ00' ID 'ZEMPDEPT' FIELD P_DEPT ID 'ACTVT' FIELD '03'.

sy-subrc 一些重要返回值如下:   0: 用户权限检查通过.   4: 用户权限不足.   8: 参数的数量不正确.   12: 权限对象不存在.

762827-20151202162817299-589829445.png
762827-20151202162817299-589829445.png
uploading.4e448015.gif
uploading.4e448015.gif

转存失败重新上传取消

创建权限对象,使分配这个权限的用户只能操作部门编号(edept)为 ‘10’ 的数据。

1. SU20,创建权限字段

2. SU21,创建权限对象

  1.首先创建对象类,输入对象类名称(ZEM1)、文本(FOR TEST),点击“保存”

2.找到之前创建的对象类,可以鼠标右键创建权限对象

3. SU02,创建参数文件,输入相关信息激活

对象输入:ZEMPOBJ00

权限输入:ZDEPT,并双击它新建一个权限

  具体的权限值(点击“维护值”)

激活!

  该授权对象包含两个字段。可以在第一个字段 EMPDEPT 中输入一 般值 ‘10’,第二个字段 ACTVT 中,在创建(01)、更改(02)和显示(03)之间进行选择,也就是

说,分配这个参数文件的用户,只能对 ‘10’ 部门的数据进行01、02、03操作。

也可以设置为“*”这样任何操作都可以通过。

到此,su01,进入‘参数文件’选项卡,添加参数文件:ZEMPRF00,保存后权限即可生效,对用户分配权限还可以通过创建role的方式,以下。

  PS:有两种方式,创建role分配给用户,或者直接将参数文件分配给用户,role是从业务层面的维度来管理权限,但实质上的功能还是由profile 来完成的。 原来sap的权限是没有role这个概念的。全部是由profile/object 的方式来实现的,但这样的方式要求对权限底层的具体细节非常了解才行,严重影响的工作效率,而且不利于只懂业务的人进行权限管理和设计。所以sap后来引入了role这样一个概念,试图通过自顶向下的方式让用户来管理权限。通过tcode pfcg 可以维护role。

4.创建role将权限分配给用户

1.PFCG 创建角色:ZEMPR00,输入描述文本,点击创建,点击“权限”选项卡,参数文件名称:点击(系统建议的),点‘更改授权数据’->‘手动,

输入授权对象:ZEMPOBJ00,回车,保存

然后指定权限的值

2.进入‘用户’选项卡,输入用户名为自己的用户名;记得‘用户比较'(用户比较,完成权限修改后与用户的权限保持一致)

到此为止,权限的设计全部完成,下面我们通过ABAP来验证权限的有效性。

权限列表中有两个权限,一个是系统通过创建role生成的,一个是我们手动创建的。

5. 创建ABAP程序,来验证权限对象的有效性

代码如下:::

1 REPORT ZHAIM_TEST01 NO STANDARD PAGE HEADING. 2 3 TABLES ZEMP_TEST. 4 5 DATA: IT_ZEMP TYPE STANDARD TABLE OF ZEMP_TEST, 6 IW_ZEMP TYPE ZEMP_TEST. 7 8 PARAMETERS P_DEPT TYPE ZEMP_TEST-EDEPT. 9 10 START-OF-SELECTION. 11 12 AUTHORITY-CHECK OBJECT 'ZEMPOBJ00' 13 ID 'ZEMPDEPT' FIELD P_DEPT 14 ID 'ACTVT' FIELD '03'. 15 "用户使用程序,想要查询部门的员工信息, 16 "通过authority-check object 来进行权限检查,ID是字段名,field是要检查的 17 "'actvt': 01 创建,02更改,03查询,06删除 18 IF SY-SUBRC <> 0. 19 MESSAGE S001(00) WITH '您没有权限查看此数据' DISPLAY LIKE 'E'. 20 ELSE. 21 22 SELECT * 23 FROM ZEMP_TEST 24 INTO TABLE IT_ZEMP 25 WHERE EDEPT = P_DEPT. 26 27 28 LOOP AT IT_ZEMP INTO IW_ZEMP. 29 30 WRITE / IW_ZEMP. 31 32 ENDLOOP. 33 34 ENDIF.

复制代码
复制代码

输入20

执行结果:

输入10

执行结果

如果存在删除操作,在删除前,检查用户的权限,可以将actvt的值改为06进行测试。

actvt的所有值储存在表TACT中。

---------------------------------------- | ACTVT|LTEXT | ---------------------------------------- | 01 |创建或生成 | | 02 |更改 | | 03 |显示 | | 04 |打印、编辑消息 | | 05 |锁定 | | 06 |删除 | | 07 |激活,生成 | | 08 |Display change documents | | 09 |显示价格 | | 10 |过帐 | | 11 |修改数值范围状态 | | 12 |维护并生成修改文档 | | 13 |初始化数量级别 | | 14 |字段选择: 生成屏幕 | | 15 |字段选择: 赋值表 | | 16 |执行 | | 17 |维护编号范围对象 | | 18 |从 coll. 程序交货 | | 19 |coll. proc 的发票 | | 20 |无翻译传输 | | 21 |传输 | | 22 |输入,包括, 分配 | | 23 |维护 | | 24 |归档 | | 25 |Reload | | 26 |修改客户帐号组 | | 27 |Display totals records | | 28 |显示行项目 | | 29 |显示存储数据 | | 30 |决定 | | 31 |确认 | | 32 |保存 | | 33 |读 | | 34 |写 | | 35 |输出 | | 36 |扩展维护 | | 37 |接受 | | 38 |完成 | | 39 |检查 | | 40 |在 DB 中创建 | | 41 |在 DB 中删除 | | 42 |转换到 DB | | 43 |释放 | | 44 |标记 | | 45 |允许 | | 46 |Merge | | 47 |借位 | | 48 |模拟 | | 49 |请求 | | 50 |移动 | | 51 |Initialize | | 52 |修改应用程序开始 | | 53 |显示应用开始 | | 54 |显示应用档案 | | 55 |修改应用程序归档 | | 56 |显示档案 | | 57 |保存档案 | | 58 |显示接管 | | 59 |分配 | | 60 |输入 | | 61 |输出 | | 62 |创建自动分帐目 | | 63 |激活 | | 64 |生成 | | 65 |重新组织 | | 66 |刷新 | | 67 |翻译 | | 68 |模块 | | 69 |放弃 | | 70 |管理员 | | 71 |分析 | | 72 |计划 | | 73 |Execute Digital Signature | | 74 |撤回批准 | | 75 |移去 | | 76 |输入 | | 77 |预输入 | | 78 |分配 | | 79 |Assign Role to Composite Role | | 80 |Print | | 81 |调度 | | 82 |补充 | | 83 |对方确认 | | 84 |结算 | | 85 |转换 | | 86 |Rebook | | 87 |返回 | | 88 |完成 | | 89 |Subscribe | | 90 |复制 | | 91 |重新激活 | | 92 |Create from Template | | 93 |计算 | | 94 |Override | | 95 |解锁 | | 96 |Reject | | 97 |设置 | | 98 |下达标记 | | 99 |生成发票清单 | | A1 |Accrue | | A2 |工资 | | A3 |修改状态 | | A4 |重新提交 | | A5 |显示报表 | | A6 |用筛选器读取 | | A7 |用筛选器写入 | | A8 |处理大量数据 | | A9 |发送 | | AA |Print Again | | AB |结算 | | B1 |显示许可值 | | B2 |技术性完成 | | B3 |导出 | | B8 |再次执行 | | B9 |Post Parked Document | | BD |维护对象在非属主系统 | | BE |IMG 项目 | | C1 |支付卡维护 | | C2 |支付卡显示 | | C3 |手工权限维护 | | C4 |Develope Payment Card | | C5 |Reopen | | C8 |确认更改 | | D1 |复制 | | DL |下载 | | DP |删除计划 | | E0 |保存摘录 | | E6 |删除自有摘录 | | E7 |删除文本摘录 | | EP |Prioritise extract | | FP |修改客户自动选项 | | G1 |Maintain Budget | | G2 |Billing | | G3 |Maintain Overhead Costs | | G4 |Maintain Reevaluation | | G5 |Park | | G6 |Transfer Budget | | G7 |Reverse | | GL |一般总览 | | H1 |Deactivate | | H2 |Activate Logging | | H3 |Deactivate Logging | | KA |激活布告 | | KI |Knock In | | KO |Knock Out | | KS |冲销布告 | | KU |Give notice | | L0 |All functions | | L1 |函数范围级 1 | | L2 |函数范围级 2 | | LM |Change LDAP Mapping | | LS |Change LDAP Sync. Switch | | MA |Deactivate mod.assistant | | P0 |Accept CCMS CSM data | | P1 |Edit CCMS CSM data | | P2 |Maintain CCMS CSM methods | | P3 |Register CCMS CSM remote systm| | PA |Open period | | PB |Close period | | PC |Open Consolid. Grp Processing | | PD |Close Consolid. Unit Processng| | PP |Set as productive | | PU |Publish | | RS |Send to New Recipient | | S1 |编辑模板 | | S2 |Edit specification | | SO |Edit in Sourcing | | SZ |Assign Switch Framework Switch| | U2 |比较业务量 | | U3 |更改业务量比较 | | U4 |添加业务量数据 | | UL |上载 | | V1 |Create version | | V2 |Change Version | | V3 |Display Version | | V4 |Delete Version | | V5 |Transport Version | | V6 |Delete Version Header | | VE |Create an Enhancement ID | | VF |Expired | ----------------------------------------

PS: AUTHORITY-CHECK OBJECT 'ZEMPOBJ00' ID 'ZEMPDEPT' FIELD P_DEPT ID 'ACTVT' FIELD '03'.

sy-subrc 一些重要返回值如下:   0: 用户权限检查通过.   4: 用户权限不足.   8: 参数的数量不正确.   12: 权限对象不存在.

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-04-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档