首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# amo完成角色

C# amo完成角色
EN

Stack Overflow用户
提问于 2015-04-15 09:33:35
回答 1查看 2K关注 0票数 0

我正在从事一个SSAS项目,在这个项目中,除其他外,我需要在C#中获得一个表格立方体的完整用户列表。目前,我让它的工作方式,我可以得到角色,但数据是不完整的。当我调用Server.Database.Roles (简化可读性)属性并对其进行枚举时,我只获得ID、名称和CreatedTimeStamp。我缺少的是成员、CellPermissions (DAX过滤器)以及这些成员的权限,这一点至关重要。我目前在Server.Database.Cube中寻找的权限(读/写/管理员),但是CubePermissions是空的.

在SSMS中,当我编写测试角色之一时,角色包含:

代码语言:javascript
复制
<ID>Role</ID>
        <Name>TestRole</Name>
        <Description>role for testing</Description>
        <Members>
            <Member>
                <Name>THORVALDDATA\rj</Name>
                <Sid>OMITTED</Sid>
            </Member>
            <Member>
                <Name>THORVALDDATA\dp</Name>
                <Sid>OMITTED</Sid>
            </Member>
            <Member>
                <Name>THORVALDDATA\jtl</Name>
                <Sid>OMITTED</Sid>
            </Member>
        </Members>

但是如前所述,当我在代码中枚举它时,我没有得到成员和描述。

你们这些聪明的人能帮我弄清楚到底出了什么问题吗?

我所有的代码:

代码语言:javascript
复制
        RoleCollection roleCollection = _analysisServer.Databases[dbID].Roles;

        Database database = _analysisServer.Databases[dbID];

        Dictionary<string, CubeRole> roles = new Dictionary<string, CubeRole>();
        foreach (Role role in roleCollection)
        {
            CubeRole cRole = new CubeRole();
            cRole.ID = role.ID;
            cRole.Name = role.Name;

            cRole.Members = role.Members;
            CubeCollection cubeCollection = _analysisServer.Databases[dbID].Cubes;

            foreach (Cube cube in cubeCollection)
            {
                foreach (CubePermission cubePermission in cube.CubePermissions)
                {
                    cRole.Filters = cubePermission.CellPermissions;
                    cRole.Permission.Add(cubePermission);
                }
            }
            roles.Add(cRole.Name, cRole);
        }
        return roles;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-16 17:44:11

使用表格,您可以拥有服务器级别的管理员。在数据库级别,您只有3个内置的权限: 1)完全控制,2)进程数据库& 3)读取。在数据库中创建的每个角色都可以选择这些权限。表格中没有多维数据集,所以您只有两个级别,服务器和数据库。MSDN是理解表式https://msdn.microsoft.com/en-us/library/hh213165.aspx中的权限和角色的良好起点。

可以循环遍历数据库的角色,以提取每个角色中的角色成员以及与每个角色关联的权限:

代码语言:javascript
复制
   //loop through database permissions
   foreach (AMO.DatabasePermission dbp in Analysisdb.DatabasePermissions)
          {
           Console.Write(dbp.Role.Name); //role name
           Console.Write(dbp.Read); // Is read role?
           Console.Write(dbp.Process); // Is process role?
           Console.Write(dbp.Administer); // Is Full control role?
          //loop through database permissions role members
          foreach (AMO.RoleMember rolemember in dbp.Role.Members)
              { 
              Console.Write(rolemember.Name); 
               }
          }

可以通过循环遍历每个角色的每个维度来提取每个维度的DAX表达式。下面的示例将获得codeplex AdventureWorks示例模型中用户角色的货币维度的DAX表达式:

代码语言:javascript
复制
     using (AMO.DimensionPermission dimensionPermission = AnalysisDb.Dimensions.GetByName("Currency").DimensionPermissions[0]);
Console.Write(dimensionPermission.AllowedRowsExpression);

有关表格AMO的更多信息,请参见http://tabularamo2012.codeplex.com/SourceControl/latest#AMO2TabularV2/AMO2Tabular.RlsFunctions.cs

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29646645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档