自开发程序设置Tcode后,用户在权限中加入Tcode即可运行,用户未加入Tcode之前不能运行程序。
目前出现一个问题,用户并没有加入Tcode,但仍然可以运行Tcode,并且在用户没有任何公司代码的权限的情况下,可以显示所有的数据。
现象:
1.运行Tcode:


2.点击查询后,用户可以看到所以的数据:

对用户的权限进行调查,结果如下:
suim 查询运行Tcode的权限:


注:S_TOCDE为运行tocd的权限对象,可以通过这个查询出那些权限对应中有运行某个Tcode的权限
查询结果:

与用户的参数文件对比:

都有SAP_NEW的参数文件,查看SAP_NEW的权限是否有限制

SAP_NEW为完全授权,不做任何限制
目前的结论为用户的参数文件中,有参数文件具有运行Tcode的权限,常见的处理方案有:
1.拿掉用户的参数文件,使其权限不具备运行Tcode的权限,但这个面临的问题有:客户的权限控制需要通过各种申请,客户部门为管理部门他们需要这些权限进行一些其他的工作,不能拿掉;
2.通过自定义权限对应的方案处理
目前这个程序需要两个自定义权限对象:
1)Tcode权限:用于控制用户是否能够运行Tcode;
2)数据权限:用户控制用户查询后显示的数据,用户能够查看到那个公司的数据之类
实现:
1.SE11创建需要的Domain(se11)

Domain设置的值为权限控制中赋值的操作
注:这个地方Value Range可以不用维护的,不影响操作,但只是为了维护权限时的一个值的参考而已,让维护者知道怎么维护即可
2.SE11创建数据类型(se11)
引用刚刚创建Domain:

3.创建权限字段(su20)


4.创建权限对象(su21)
先创建对象类,如果存在需要的对象类,这里可以不用创建。


创建权限对象:


这里写入的信息为前面创建的各种对象
这里的字段为后续检查权限的时候对应检查的字段值
5.关联程序和自定义程序(SU24)(这一步为必须)
创建程序通常会创建一个tcode,例如ZABCD。(下面的举例中用到的Tcode为:ZFAM_POST)
把权限对象和tcode关联,(不是必须,只是建议,涉及到创建角色时权限对象是否会自动带出)

运行:

点击修改:

双击对应的权限对象,可以修改默认的权限对象值


权限检查选择YES

这一步的作用在于PFCG中通过TCODE能否带出对应的权限对象,例如:

在ROLE中加入了两个Tcode,但一个tcode关联了SU24,一个没有,这里加入Tcode以后查看权限对应就会看到如下的结果,只有资产转固的Tcode带出了关键的权限对象值,并且默认的权限值为过账(04)

6.对Tcode进行权限处理
Tcode没有加权限之前:

点击运行:

可以运行成功;
加入权限控制:
加入权限对象,点击VALUES设置对应的权限值


7.在代码中加入权限对象的判断
本代码中加入的权限对象的判断主要用于判断用户是否有公司代码的权限,如果没有,再删除对应的公司代码数据,代码如下:

效果:(用户没有任何公司代码的权限)

点击查询后,没有任何数据出现。
-END-

更多经验请关注公众号“菜鸟之家”,每周分享顾问经验,绝对干货满满!

长按二维码关注我们,收获更多干货满满的SAP教学。
小手点一点关注,顾问路上不迷路!

扫描二维码或添加管理员微信号LH3577049加入顾问群
图文来源:先谢郭嘉
图文编辑:Yannick
精选知识
1056

被折叠的 条评论
为什么被折叠?



