`
Jack Wu
  • 浏览: 886748 次
  • 来自: ...
社区版块
存档分类
最新评论

如何设计和使用自定义的权限对象(自定义权限检查函数)

阅读更多

在sap扩展中用户往往都需要使用自己的权限对象,为了达到次目的,请按下列步骤建立和维护权限对象

1、Create an Anthorization Field(SU20)创建权限对象字段(存储在AUTHX表中)

2、Create an Authorization Object(SU21) 创建权限对象 
创建权限对象类别(存储在TOBCT表中)
点击对象类别创建权限对象(存储在TOBJ表中),生成SAP_ALL

3、Assign an Authorization Object to an Object Class(SU02或PFCG)

4、权限赋值关系图

                        user  master record
                        /  ..............................\
            auth. profile              Composite auth. profile
              /.................\                      /                  \
             /                   \                    /                    \
  Authorization                                            Auth. Profile
     /                                                               /.................\          

5、Call "Authorith-Check" in Program  to Check Authorization.

这是我编写针对具体权限对象替代Authorith-Check的函数

form zcustcheckauth using  value(z_vkbur) like vbak-vkbur
                     z_return type i.
data: wa_ust12 like ust12.
data: bgetsubfile(1) type c.
data: begin of db_file occurs 10,
         profile like ust04-profile,
         typ     like usr10-typ,
      end of db_file.

data: begin of mid_db_file occurs 10,
         profile like ust04-profile,
         typ     like usr10-typ,
      end of mid_db_file.

data: begin of db_file_end occurs 10,
         profile like ust04-profile,
      end of db_file_end.

data: begin of db_auth occurs 10,
         objct like ust10s-objct,
         auth like ust10s-auth,
      end of db_auth.

   z_return = 4.
   select ust04~profile usr10~typ
     into corresponding fields of table db_file
     from ust04
       inner join usr10 on usr10~profn = ust04~profile
         and usr10~aktps = 'A'
   where ust04~bname = sy-uname.

   refresh mid_db_file.
   clear mid_db_file.
   loop at db_file.
      if db_file-typ <> 'C'.
        db_file_end-profile = db_file-profile.
        append db_file_end to db_file_end.
      else.
        bgetsubfile = 'X'.
        append db_file to mid_db_file.
      endif.
   endloop.
   refresh db_file.
   clear db_file.

   while bgetsubfile = 'X'.
     bgetsubfile = space.
     select ust10c~subprof as profile usr10~typ
       into corresponding fields of table db_file
     from ust10c
       inner join usr10 on usr10~profn =  ust10c~subprof
         and usr10~aktps = 'A'
     for all entries in mid_db_file
     where ust10c~profn = mid_db_file-profile.

     refresh mid_db_file.
     clear mid_db_file.
     loop at db_file.
      if db_file-typ <> 'C'.
        db_file_end-profile = db_file-profile.
        append db_file_end to db_file_end.
      else.
        bgetsubfile = 'X'.
        append db_file to mid_db_file.
      endif.
     endloop.
     refresh db_file.
     clear db_file.
   endwhile.

   select objct auth into corresponding fields of table db_auth
   from ust10s
   for all entries in db_file_end
   where ust10s~aktps = 'A' and ust10s~profn = db_file_end-profile.

   select von bis into corresponding fields of wa_ust12
     from ust12
     for all entries in db_auth
     where ust12~aktps = 'A' and ust12~field = 'VKBUR'
       and ust12~objct = db_auth-objct
       and ust12~auth = db_auth-auth.

     if ( wa_ust12-bis ne space ).
        if ( z_vkbur ge wa_ust12-von ).
          if ( z_vkbur le wa_ust12-bis ).
            z_return = 0.
            exit.
          endif.
        endif.
     elseif ( z_vkbur = wa_ust12-von ).
       z_return = 0.
       exit.
     elseif ( '*' = wa_ust12-von ).
       z_return = 0.
       exit.
     endif.
   endselect.
endform.
调用的方法

*&---------------------------------------------------------------------*
*&      Form  USEREXIT_CHECK_VBAK
*&---------------------------------------------------------------------*
*                                                                     *
*       This Userexit can be used to add additional logic for         *
*       checking the header for completeness and consistency.         *
*                                                                     *
*       US_DIALOG  -  Indicator, that can be used to suppress         *
*                     dialogs in certain routines, e.g. in a          *
*                     copy routine.                                   *
*                                                                     *
*       This form is called from form VBAK_PRUEFEN.                   *
*                                                                     *
*---------------------------------------------------------------------*
form userexit_check_vbak using us_dialog.
*{   INSERT         DEVK901354                                        1
 data: z_s_vkbur like knvv-vkbur.
 data: z_auth_check type i value 4.
 if sy-tcode = 'VA01' or
    sy-tcode = 'VA02'.
   authority-check object 'V_VBKA_VKO'
                 id 'VKORG' dummy
                 id 'VTWEG' dummy
                 id 'SPART' dummy
                 id 'VKBUR' field vbak-vkbur
                 id 'VKGRP' dummy
                 id 'KTAAR' dummy
                 id 'ACTVT' dummy.
   if  sy-subrc ne 0.
     message e900(zdev).
   endif."不能创建非主管商家订单
   if sy-tcode eq 'VA01'.
     select single vkbur into z_s_vkbur
     from knvv
     where knvv~kunnr =  vbak-kunnr
       and knvv~vkorg =  vbak-vkorg
       and knvv~vtweg =  vbak-vtweg
       and knvv~spart =  vbak-spart
       and knvv~vkbur =  vbak-vkbur.
     if sy-subrc ne 0.
       message e001(zdev).
     endif.
   endif.
 else.
   perform zcustcheckauth using vbak-vkbur z_auth_check.

   if  z_auth_check ne 0.  "如果没有权限,取当前商家主管销售组
     select single vkbur into z_s_vkbur
     from knvv
     where knvv~kunnr =  vbak-kunnr.
     if sy-subrc ne 0.
       message e001(zdev).
     endif.    "检查当前商家主管销售组是否在用户权限内
     z_auth_check = 4.
     perform zcustcheckauth using z_s_vkbur z_auth_check.
     if z_auth_check ne 0.
       message e900(zdev).
     endif.
  endif.
 endif.
*}   INSERT


endform.



分享到:
评论

相关推荐

    SAP 权限检查 (通过自定义函数进行控制检查)

    SAP 权限检查(通过自定义函数进行控制检查) 在 SAP 系统中,权限检查是一项重要的安全机制,用于控制用户对系统资源的访问权限。通过自定义函数进行控制检查,可以更好地实现权限管理。下面将详细介绍权限检查的...

    第7章 自定义函数

    本章我们将深入探讨"第7章 自定义函数"的相关知识点,结合提供的标签"源码"和"工具",我们将讨论如何创建、使用和优化自定义函数,以及它们在实际开发中的应用。 首先,自定义函数是一种编程构造,通过它我们可以...

    《声明、使用与自定义权限》对应源码

    本文将深入探讨“声明、使用与自定义权限”的概念,以及如何通过源代码来理解和实现这些功能。 首先,我们来了解一下Android权限系统的基本概念。Android权限是系统用来控制应用程序访问特定资源或执行敏感操作的一...

    动态自定义权限设置.rar

    在IT领域,动态自定义权限设置是一个重要的概念,特别是在软件开发和系统管理中。它涉及到如何根据用户的需求或角色在运行时灵活地调整和分配权限。动态权限设置允许应用程序更安全、更灵活地控制不同用户对系统资源...

    易语言源码易语言动态自定义权限设置源码.rar

    综上所述,这个压缩包中的源码将向你展示如何使用易语言实现动态自定义权限设置。通过学习和理解这段代码,你不仅可以掌握易语言的基本语法,还能了解到权限管理系统的设计和实现方法。这对于提升你的编程技能,特别...

    使用自定义按钮实现Facebook授权登陆和登出

    本文将深入探讨如何使用自定义按钮来实现Facebook授权登录和登出功能。 首先,我们要了解Facebook的OAuth 2.0授权流程,这是Facebook提供给开发者进行身份验证的基础。用户点击自定义按钮后,应用会通过Facebook ...

    Java基本的权限设计

    通过构造函数传递这个对象,然后在需要增强的方法上覆盖原对象的行为,对权限检查等操作进行封装。对于不需要增强的方法,可以直接调用被增强对象的原始实现。 通过以上设计和实现,Java权限系统能够为复杂的应用...

    存储过程触发器及自定义函数PPT课件.pptx

    在数据库管理系统中,存储过程、触发器和用户自定义函数是三个重要的概念,它们在实现复杂的业务逻辑和数据管理方面发挥着关键作用。本课件主要关注存储过程和触发器,同时也提到了用户自定义函数。 首先,存储过程...

    ListView的使用自定义BaseAdapter

    本篇主要讲解如何在Android Studio中使用ListView,并结合自定义的BaseAdapter来实现数据的绑定和显示。 首先,我们需要在布局文件中添加ListView组件。在res/layout目录下的xml布局文件中,可以这样定义一个...

    django认证系统实现自定义权限管理的方法

    接下来,我们详细阐述如何使用Django的认证系统实现自定义权限管理。 一、了解Django认证系统的组成 1. User模型 User模型是用户认证的基础,它包含了许多字段如username、password、email等,这些字段在用户注册...

    Android自定义弹出框实现(修改版)完整实例源码

    此外,可能还会涉及到权限检查、生命周期管理等细节。 总之,“Android自定义弹出框实现(修改版)完整实例源码”提供了一种自定义Android弹出框的实现方式,通过学习和理解这个实例,开发者能够更好地掌握自定义...

    Android 自定义相机拍照和录像

    在Android开发中,自定义相机拍照和录像是一项常见的需求,特别是在构建个性化应用或者需要特定功能时。本项目针对这一主题提供了完整的解决方案,并已转化为Android Studio项目,方便开发者直接导入和使用。 首先...

    一个基本示例,演示如何使用自定义输入绑定来支持AzureFunctions的自定义身份验证。___下载.zip

    - 示例代码:展示了如何创建和使用自定义身份验证绑定的代码示例。 - `function.json`文件:包含自定义输入绑定的配置信息。 - 测试用例:可能有单元测试或集成测试,用于验证自定义身份验证逻辑的正确性。 通过...

    Android项目实战--手机卫士05--自定义对话框与拨打电话来启动activity

    3. 启动Activity:当权限检查通过后,使用`startActivity()`方法启动带有拨号Intent的Activity。如果是`ACTION_CALL`,系统会直接拨打号码;如果是`ACTION_DIAL`,用户还需手动确认拨打。 结合以上两点,我们可以...

    详解python如何在django中为用户模型添加自定义权限

    总的来说,为Django用户模型添加自定义权限是一个涉及模型、信号处理器和权限检查的过程。通过这种方式,你可以根据业务需求定制用户的访问权限,增强系统的安全性。希望这篇内容能帮助你理解如何在Django中实现这一...

    Android自定义相机源码(Builder模式封装)

    7. **权限管理**:别忘了在Android 6.0及以上版本检查运行时权限,特别是使用相机和存储权限。 在`CustomCamera`这个项目中,源码应该包含上述各个部分的实现,并通过Builder模式提供灵活的配置选项。Builder模式...

    Android自定义action与permission_java_action_

    通过定义自定义权限,开发者可以限制其他应用对敏感数据或功能的访问。例如,如果你有一个应用程序处理用户的联系人信息,你可以定义一个如"com.example.APP.READ_CONTACTS"的权限,然后在需要访问这些信息的地方...

    WINCC-如何使用自定义的对话框实现用户登录

    上述代码示例展示了如何使用 WINCC 的 `PWGENConnect` 和 `PWGENChangePassword` 函数来连接到 ODBC 数据源并修改密码。其中,`PWGENChangePassword` 函数接收四个参数:用户名、旧密码、新密码以及错误信息变量。 ...

    SharePoint设置用户组访问权限WebPart

    在实际部署和使用这个WebPart时,管理员需要在SharePoint站点上添加WebPart,配置所需的权限检查规则,这可能涉及编辑WebPart的属性或使用 SharePoint Designer 进行更高级的定制。同时,为了确保用户有合适的权限,...

Global site tag (gtag.js) - Google Analytics