You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ Builder开发DataSnap REST:如何在方法级添加TRoleAuth属性?

在C++ Builder中给DataSnap REST方法添加TRoleAuth属性的方法

刚好我对DataSnap的权限配置挺熟悉的,在C++ Builder里给方法加上TRoleAuth属性其实和Delphi的思路一致,只是语法上要适配C++的特性,具体操作如下:

首先,确保你的项目引用了DataSnap相关单元,并且在类的头文件里包含必要的头文件:

#include <DataSnap.DSAuth.hpp>
#include <System.Classes.hpp>

接下来,在你的ServerMethods类定义中,直接在需要权限控制的方法声明前添加TRoleAuth属性标记即可,注意C++里用双引号包裹角色名称:

class PACKAGE TServerMethods1 : public TComponent
{
__published:
public:
    // 限定只有admin角色能访问这个EchoString方法
    [TRoleAuth("admin")]
    UnicodeString __fastcall EchoString(UnicodeString Value);
    
    // 这个ReverseString方法没有权限限制,所有合法用户都能访问
    UnicodeString __fastcall ReverseString(UnicodeString Value);
};

然后在实现文件里完成方法的编写:

UnicodeString __fastcall TServerMethods1::EchoString(UnicodeString Value)
{
    return Value;
}

UnicodeString __fastcall TServerMethods1::ReverseString(UnicodeString Value)
{
    return Value.IsEmpty() ? Value : Value.Reverse();
}

几个关键点提醒:

  • TRoleAuth的定义在DataSnap.DSAuth.hpp里,一定要记得包含这个头文件,不然编译器会报错找不到类。
  • 如果需要给一个方法开放给多个角色,直接用逗号分隔角色名称就行,比如[TRoleAuth("admin,editor,guest")]。
  • 类必须用PACKAGE宏修饰,这是C++ Builder中创建可导出组件类的标准要求,保证DataSnap服务能正确识别并调用这个类的方法。
  • 方法要使用__fastcall调用约定,和Delphi的默认调用约定保持一致,避免调用时出现参数不匹配的问题。

内容的提问来源于stack exchange,提问作者Tracer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:33:10