获得AX Role下面的duties和privileges 列表

本文提供了一个方法来获取指定角色下所有职责和权限的详细信息,包括职责名称、描述、权限名称、描述、入口点类型、访问级别等。

Use the below job to get list of duties and privileges under one or more roles

原文来自:http://community.dynamics.com/ax/b/mukeshhirwani_dynamicsax/archive/2015/05/11/list-of-duties-and-privileges-under-a-role

 

static void SNP_getAllDutiesAndPrivilidgesUnderRole(Args _args)
{
  str                             fileName = @"C:\Users\<span style="font-family:Consolas;font-size:12px;color:#8b0000;">[UserId]</span>\Desktop\allDutiesAndPrivilidgesUnderRole.csv";

    CommaTextIo                     commaTextIo;

    FileIOPermission                permission;

    SecurityTaskEntryPoint  taskEntryPoint;

    SecurityRole            role;

    SecurityRoleTaskGrant   taskGrant;

    SecuritySubTask         subTask;

    SecurityTask            privilege;

    SecurityTask            securityTask;

    SecurableObject         securableObject;

    DictEnum                dictEnum;

    str privAOTName;

    str dutyAOTName;

    str privName;

    str dutyName;

    str entrName;

    str accessLevel;

    str menuItemType;


    FromTime                    startTime = timeNow();


    #File

    ;


    permission = new FileIOPermission(fileName,#io_write);

    permission.assert();

    commaTextIo = new CommaTextIo(fileName,#io_write);
    
    //Header

    commaTextIo.write(

        "Role AOT name",

        "Description",

        "Duty AOT name",

        "Description",

        "Privilidge AOT name",

        "Description",

        "Entry point",

        "Type",

        "Access level");


    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*'

    {

        menuItemType    = "";

        dutyAOTName     = "";

        dutyName        = "";

        privAOTName     = "";

        privName        = "";

         if (subTask.RecId)

        {

            switch (taskEntryPoint.PermissionGroup)

            {

                case AccessRight::View:

                    accessLevel = "Read";

                    break;

                case AccessRight::Edit:

                    accessLevel = "Update";

                    break;

                case AccessRight::Add:

                    accessLevel = "Create";

                    break;

                case AccessRight::Delete:

                    accessLevel = "Delete";

                    break;

                default:

                    accessLevel = "";

                    break;

            }

        }




        select privilege

            where privilege.RecId == taskGrant.SecurityTask

            && SecurityTaskType::Duty == privilege.Type;




        dutyAOTName = privilege.AotName;

        dutyName = privilege.Name;




        select privilege

            where privilege.RecId == subTask.SecuritySubTask

            && SecurityTaskType::Privilege == privilege.Type;




        privAOTName = privilege.AotName;

        privName = privilege.Name;




        select RecId, Type, Name from securableObject

        where securableObject.RecId == taskEntryPoint.EntryPoint && (securableObject.Type == SecurableType::MenuItemDisplay

            || securableObject.Type == SecurableType::MenuItemAction || securableObject.Type == SecurableType::MenuItemOutput);




        dictEnum = new DictEnum(enumNum(MenuItemType));

        menuItemType = dictEnum.index2Name(securableObject.Type);




        commaTextIo.write(role.AotName,

                            role.Name,

                            dutyAOTName,

                            dutyName,

                            privAOTName,

                            privName,

                            securableObject.Name,

                            menuItemType,

                            accessLevel);

        }

    //sometimes a role has a privielge direclty assigned instead of a duty. So this code is for those privileges.

    //In this case duty will not exist.

    while select SecurityTask, SecurityRole from taskGrant

        join RecId, Type, AOTName from securitytask where securityTask.RecId == taskGrant.SecurityTask

                && taskGrant.SecurityRole == taskGrant.SecurityRole && securitytask.Type == SecurityTaskType::Privilege

        join securityTask, EntryPoint from taskEntryPoint where taskEntryPoint.SecurityTask == securitytask.RecId




        {

            menuItemType    = "";

            dutyAOTName     = "";

            dutyName        = "";

            privAOTName     = "";

            privName        = "";




            select RecId, Type, Name from securableObject

                where securableObject.RecId == taskEntryPoint.EntryPoint && (securableObject.Type == SecurableType::MenuItemDisplay

                    || securableObject.Type == SecurableType::MenuItemAction || securableObject.Type == SecurableType::MenuItemOutput);




            if(securableObject)

            {

                select privilege

                    where privilege.RecId == securityTask.RecId

                    && SecurityTaskType::Privilege == privilege.Type;




                privAOTName = privilege.AotName;

                privName = privilege.Name;




                dictEnum = new DictEnum(enumNum(MenuItemType));

                menuItemType = dictEnum.index2Name(securableObject.Type);




                commaTextIo.write(role.AotName,

                        role.Name,

                        dutyAOTName,

                        dutyName,

                        privAOTName,

                        privName,

                        securableObject.Name,

                        menuItemType,

                        accessLevel);

            }

    }

    CodeAccessPermission::revertAssert();

    info(strFmt("Total time: %1", timeConsumed(startTime, timeNow())));
}

 


 

【电动车优化调度】基于模型预测控制(MPC)的凸优化算法的电动车优化调度(Matlab代码实现)内容概要:本文介绍了基于模型预测控制(MPC)的凸优化算法在电动车优化调度中的应用,并提供了Matlab代码实现。该方法结合了MPC的滚动优化特性与凸优化的高效求解能力,用于解决电动车充电调度问题,提升电网运行效率与可再生能源消纳能力。文中还提及多个相关研究方向技术支撑,包括智能优化算法、机器学习、电力系统管理等,展示了其在多领域交叉应用的潜力。配套资源可通过提供的网盘链接获取,涵盖YALMIP工具包及其他完整仿真资源。; 适合人群:具备一定电力系统、优化理论及Matlab编程基础的科研人员研究生,尤其适合从事电动汽车调度、智能电网优化等相关课题的研究者。; 使用场景及目标:①实现电动车集群在分时电价或电网需求响应机制下的有序充电调度;②结合可再生能源出力与负荷预测,利用MPC进行多时段滚动优化,降低电网峰谷差,提高能源利用效率;③为学术论文复现、课题研究及工程仿真提供可靠的技术路线与代码支持。; 阅读建议:建议读者结合文档中提到的智能优化算法与电力系统背景知识进行系统学习,优先掌握MPC基本原理与凸优化建模方法,并下载配套资源调试代码,以加深对电动车调度模型构建与求解过程的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值