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
相关产品推荐
相关产品推荐

