Роль / Привилег обзор CRM - PullRequest
       396

Роль / Привилег обзор CRM

1 голос
/ 28 февраля 2012

Я работаю над MS CRM 4.0.

Есть ли возможность показать обзор всех ролей и их привилегий для каждого объекта?Мне нужно это, например, в Excel, чтобы показать это клиенту.Это должно быть построено примерно так:

  • Rolename
    • Имя объекта
      • Создать: Организация
      • Читать: Организация
      • Написать: Бизнес-единица
      • ...

Есть ли функциональность для этого?Я использую много ролей и пользовательских объектов, и мне потребовалось бы много времени, чтобы сделать это вручную.

1 Ответ

1 голос
/ 03 апреля 2012

Я нашел этот пример на MSDN, который должен получить то, что вы запрашиваете. http://archive.msdn.microsoft.com/CrmSecurityReports

Нажмите на вкладку загрузки. Почтовый индекс содержит четыре отчета для отображения привилегий по роли безопасности и / или подразделению. Есть 2 отчета по ролям и 2 отчета по пользователям.

Это из файла с именем RolePrivileges.sql и должно получить то, что вам нужно:

-- Query on entity roles, consolidating records
select RoleName, BusinessUnitName, EntityName
, max([Read]) as [Read], max([Write]) as [Write], max([Append]) as [Append], max([AppendTo]) as [AppendTo]
, max([Create]) as [Create], max([Delete]) as [Delete], max([Share]) as [Share], max([Assign]) as [Assign] 
from                                                                                                
-- Use sub query to split rights into columns, then outer query gets the Depth
(select r.name as RoleName, r.businessunitidname as BusinessUnitName, e.Name as EntityName
, isnull(case when p.AccessRight & 1  0 then max(rp.PrivilegeDepthMask) end, 0) as [Read]         
-- Use AccessRight to determine action
, isnull(case when p.AccessRight & 2  0 then max(rp.PrivilegeDepthMask) end, 0) as [Write]
, isnull(case when p.AccessRight & 4  0 then max(rp.PrivilegeDepthMask) end, 0) as [Append]
, isnull(case when p.AccessRight & 16  0 then max(rp.PrivilegeDepthMask) end, 0) as [AppendTo]
, isnull(case when p.AccessRight & 32  0 then max(rp.PrivilegeDepthMask) end, 0) as [Create]
, isnull(case when p.AccessRight & 65536  0 then max(rp.PrivilegeDepthMask) end, 0) as [Delete]
, isnull(case when p.AccessRight & 262144  0 then max(rp.PrivilegeDepthMask) end, 0) as [Share]
, isnull(case when p.AccessRight & 524288  0 then max(rp.PrivilegeDepthMask) end, 0) as [Assign]
from 
    dbo.FilteredRole r
    join dbo.RolePrivileges rp on r.roleid = rp.roleid
    join dbo.FilteredPrivilege p on rp.privilegeid = p.privilegeid
    join dbo.PrivilegeObjectTypeCodes potc on p.privilegeid = potc.privilegeid
    join MetadataSchema.Entity e on potc.ObjectTypeCode = e.ObjectTypeCode
group by 
    r.name, r.businessunitidname, e.Name, p.AccessRight) as Role
group by 
    RoleName, BusinessUnitName, EntityName
...