2012-02-28 54 views
1

我正在使用MS CRM 4.0。角色/特權概覽CRM

是否有可能顯示每個實體上的所有角色及其權限的概覽? 我需要它,例如,在Excel中將其展示給客戶。 應該建立這樣的事:

  • ROLENAME
    • 實體名稱
      • 創建:組織
      • 閱讀:組織
      • 寫:業務部
      • ...

有沒有這樣的功能? 我正在使用很多角色和自定義實體,並且手動完成它需要我很多工作。

回答

1

我在MSDN上找到了這個例子,它應該能讓你知道你正在請求什麼。 http://archive.msdn.microsoft.com/CrmSecurityReports

點擊下載標籤。該zip包含四個報告以顯示安全角色和/或業務單位的權限。有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