⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbproviderbase.h

📁 SecurityLib一个user-rights系统控件
💻 H
字号:
//---------------------------------------------------------------------------

#ifndef DBProviderBaseH
#define DBProviderBaseH
//---------------------------------------------------------------------------

#include "list.hpp"
#include "Rights.h"

enum SecOFCmd { ofcCheck, ofcInit, ofcGetSecDMod, ofcGetSecDModSmpDlg, ofcGetSecDModDlg, ofcDestruct, ofcValidate , ofcGetDBProvider, ofcDelDBProvider};


namespace Security {


class TSecurity;
class TSecDModBaseFrm;
class TSecDModSmpDlgBaseFrm;
class TSecDModDlgBaseFrm;


struct TSecObjData {
	TSecurity *Security;
	union {
		struct {
			const char *SecName;
			const char *Alias;
			const char *SecUser;
		};
		struct {
			int UserID;
			int GroupID;
		};
		TObject *Object;
		char privkey[sizeof(PswdString)];
	};

	PswdString &Key() { return *(PswdString *)privkey; }

	TSecObjData(TSecurity *co, const char *pSecName, const char *pAlias, const char *pSecUser):
		Security(co)
	{
		SecName = pSecName, Alias = pAlias, SecUser = pSecUser;
	}
	TSecObjData(TSecurity *co, int pUserID, int pGroupID) :
		Security(co)
	{
		UserID = pUserID;
		GroupID = pGroupID;
	}
	TSecObjData(TSecurity *co, TObject *obj) :
		Security(co)
	{
		Object = obj;
	}

	TSecObjData(TSecurity *co, const PswdString &key) :
		Security(co)
	{
		Key() = key;
	}

	TSecObjData(TSecurity *co) :
		Security(co)
	{}

};


class DBProviderBase : public TObject {
	private:
//		static ilist<DBProviderBase> DBProviders;
		static const char *DBEnginesNames[];
		static const TClass DBEnginesClasses[];
		static const int DBEnginesCount;

		static PswdString AddrKey;

//		static void * (*SecObjectFactory)(const char *dbeng, void *co, SecOFCmd cmd, TSecObjData *od);

		HINSTANCE ChildProv;

		word Counter;

		void SetPath();

		void *operator new(size_t, void *b) { return b; }


	protected:
		adptr<TStringList> Params;
		void *Data;
		DBProviderBase *DBProv;
		TSecurity *Security;

		AnsiString Path;


		AnsiString GetParam(const char *name) const { return Params->Values[name]; }
		bool GetBoolParam(const char *name) const { return GetParam(name) != "0";  }
		int GetIntParam(const char *name)   const { return StrToIntDef(GetParam(name), 0); }


		static PswdString __fastcall (*EncodeWithDBProviderKey)(const PswdString &co);
		static PswdString __fastcall (*DecodeWithDBProviderKey)(const PswdString &co);



	public:
		AnsiString Name;

		virtual __fastcall DBProviderBase(const char *name);
		__fastcall DBProviderBase(const char *name, bool useparams);
		virtual __fastcall ~DBProviderBase() { if (ChildProv) FreeLibrary(ChildProv); }

		virtual TSecDModBaseFrm * __fastcall GetSecDMod(TSecObjData *od)  { return 0; }
		virtual TSecDModSmpDlgBaseFrm * __fastcall GetSecDModSmpDlg(TSecObjData *od)  { return 0; };
		virtual TSecDModDlgBaseFrm * __fastcall GetSecDModDlg(TSecObjData *od) { return 0; };
		virtual void __fastcall Destruct(TSecObjData *od);
		virtual bool __fastcall Init(void *data) { Data = data; if (Params) Params->CommaText = (char *)data; return true; }


		//-----------------

		DBProviderBase *LoadDBProvider(const char *filename, const char *dbeng, void *data = 0);
		void __fastcall UnloadDBProvider(DBProviderBase *);

		virtual PswdString __fastcall Validate(const PswdString &co) { return (EncodeWithDBProviderKey)(co); }


		static DBProviderBase * __stdcall Handle(const char *dbeng, SecOFCmd cmd, TSecObjData *od);

		static bool CheckAddress(const PswdString &key) {
			PswdString p = DecodeWithDBProviderKey(key);
			return *(void **)(void *)p == Handle;
		}

		static bool CheckAddress() {
			PswdString p = DecodeWithDBProviderKey(AddrKey);
			return *(void **)(void *)p == Handle;
		}

		static inline void SetKeys( PswdString __fastcall (*enc)(const PswdString &co), PswdString __fastcall (*dec)(const PswdString &co)) {
			EncodeWithDBProviderKey = enc;
			DecodeWithDBProviderKey = dec;
		}

};

typedef DBProviderBase * __stdcall (*TSecObjectFactory)(const char *dbengine, SecOFCmd cmd, TSecObjData *odata);


__fastcall DBProviderBase::DBProviderBase(const char *name)
	: ChildProv(0), Counter(0), Name(name), Path(":")
{
	Params = new TStringList();
}

__fastcall DBProviderBase::DBProviderBase(const char *name, bool useparams)
	: ChildProv(0), Counter(0), Name(name), Path(":")
{
	if (useparams) Params = new TStringList(); else Params = 0;


}






} //namespace Security






#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -