activo | asset management system

Tuesday, September 23, 2008

Limited Access Per Group via xSessions

Tulisan saya tentang membuat limited access per group ternyata mengandung kesalahan. Tips ini bisa dipakai jika semua user-nya memiliki permission sebagai developer yang bisa diketahui dari User > Permission > Tools > Development Tools = Tercentang. Jika tidak, maka tips ini tidak bisa alias error. Hal ini disebabkan Table SysClientSessions adalah table admin yang ternyata tidak bisa disentuh oleh user yang TIDAK memiliki hak sebagai admin. Karena itu, solusinya adalah bukan membaca langsung Table SysClientSessions, tapi ubah jadi membaca pembungkusnya yaitu class xSessions.

Untuk memperbaikinya, butuh sedikit perubahan. Penambahan script di SysStartupCmd bisa diremark, lalu tambahkan kode berikut ini di class Info > startupPost :

/*
No SYS code must exist in this method
*/
void startupPost()
{


int counter;
int num = 0;
int maxSessions = Info::licensedUsersTotal();
xSession _xSession;
UserInfo userInfo;
UserInfo userInfo2;
UserId currentUserId;

SysClientSessions _SysClientSessions;
ABCUserGroupList _ABCUserGroupList;
ABCUserGroupList _ABCUserGroupList2;
ABCUserGroupInfo _ABCUserGroupInfo;
xSession session;
int x, y;
int maxSession ;

;
currentUserId = curuserid();

session = new xSession();
x = 0;
y = 0;
while select * from _ABCUserGroupList
where _ABCUserGroupList.userid == session.userId()
{
x++;
}
if ( x > 0 )
{
select ABCgroupid from _ABCUserGroupList
where _ABCUserGroupList.userid == session.userId() ;

select total from _ABCUserGroupInfo
where _ABCUserGroupInfo.id == _ABCUserGroupList.ABCgroupid;

maxSession = _ABCUserGroupInfo.total;

/* alur logika
1. dapatkan ABCgroupid nya apa
2. cek ke ABCusergrouplist dengan ABCgroupid tersebut
3. cek ke sessionid
*/

counter = 0;

while select * from _ABCUserGroupList2
where _ABCUserGroupList2.ABCgroupid == _ABCUserGroupList.ABCgroupid
{
for(counter = 1; counter <>
{
session = new xSession(counter, true);
if(session.userId() == _ABCUserGroupList2.userid )
{
y++;
}
}

}

if ( y > maxSession )
{
Box::info( 'Sorry, your group is full.', 'Administrator' );
{
this.shutDown(true);
}
}
}

}

Komentar Terbaru