Search code examples
x++axaptadynamics-ax-2012

Where are Duties (table name) stored in AX?


I want to access Security duties (in code), but I don't know where they are stored (in which table)?

Privileges are stored in SecurityTask, now I need to know where duties are stored in AX 2012.

Thank you.


Solution

  • I found it here: http://arsalanax.blogspot.be/2012/02/role-based-security-in-ax.html

    Roles are stored in SecurityRole

    User to role mappings in SecurityUserRole

    Duties & privileges stored in SecurityTask

    Duty to privileges mappings are stored in SecuritySubTask

    Role to duty mappings are stored in SecurityRoleTaskGrant

    UPDATE (query added)

    SecurityTaskEntryPoint  taskEntryPoint;
    SecurityRole            role;
    SecurityRoleTaskGrant   taskGrant;
    SecuritySubTask         subTask;
    SecurityTask            privilege;
    str privName;
    str dutyName;
    str entrName;
    str accessLevel;
    ;
    
    while select taskEntryPoint
    join subTask
        where subTask.SecuritySubTask == taskEntryPoint.SecurityTask
    join taskGrant
        where taskGrant.SecurityTask == subTask.SecurityTask
    join role
        where role.RecId == taskGrant.SecurityRole
        &&  role.AotName like 'Sales*'
        //|| role.AotName like 'System*'
    {
         if (subTask.RecId)
        {
            switch (taskEntryPoint.PermissionGroup)
            {
                case AccessRight::View:
                    accessLevel = "R";
                    break;
                case AccessRight::Edit:
                    accessLevel = "U";
                    break;
                case AccessRight::Add:
                    accessLevel = "C";
                    break;
                case AccessRight::Delete:
                    accessLevel = "D";
                    break;
                default:
                    accessLevel = "";
                    break;
            }
        }
    
        select privilege
            where privilege.RecId == taskGrant.SecurityTask
            && SecurityTaskType::Duty == privilege.Type;
        dutyName = privilege.AotName;
    
        select privilege
            where privilege.RecId == subTask.SecuritySubTask
            && SecurityTaskType::Privilege == privilege.Type;
        privName = privilege.AotName;
    
        info(strFmt("EP: %1, Pr: '%2', Du: %3, Ro: %4, Ac: %5", taskEntryPoint.EntryPoint, privName, dutyName, role.AotName, accessLevel));
    }