{"id":14244,"date":"2007-01-17T11:42:00","date_gmt":"2007-01-17T11:42:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/crm\/2007\/01\/17\/cascaded-security-privileges-and-sharing\/"},"modified":"2023-05-31T15:32:14","modified_gmt":"2023-05-31T22:32:14","slug":"cascaded-security-privileges-and-sharing","status":"publish","type":"post","link":"https:\/\/www.microsoft.com\/en-us\/dynamics-365\/blog\/no-audience\/2007\/01\/17\/cascaded-security-privileges-and-sharing\/","title":{"rendered":"Cascaded Security Privileges and Sharing"},"content":{"rendered":"
Continuing our tradition of introducing guest speakers, here is a post by MVP and Microsoft Partner Scott Colson. Scott is the first guest speaker for 2007.<\/span><\/p>\n The CRM security model is a complex beast that provides a lot of granular control over who can do what with a given CRM record. I\u2019ve recently been called on to resolve some more complex security scenarios which have really opened my eyes to two key concepts in the security model: cascading access and sharing. <\/span><\/p>\n Before getting into these concepts, I want to review the security basics: privilege, access, and roles.<\/span><\/p>\n Privilege: What a user can do with a record<\/span><\/b><\/p>\n In general, each user in the CRM system can be granted permission to carry out one or more of the following actions on a particular record type. This permission is referred to as a privilege:<\/span><\/p>\n \u2022\u00a0\u00a0\u00a0 <\/span><\/span><\/span>Create \u2013 Create a new record<\/span><\/p>\n \u2022\u00a0\u00a0\u00a0 <\/span><\/span><\/span>Read \u2013 View or open an existing record<\/span><\/p>\n \u2022\u00a0\u00a0\u00a0 <\/span><\/span><\/span>Write \u2013 Save changes to an existing record<\/span><\/p>\n \u2022\u00a0\u00a0\u00a0 <\/span><\/span><\/span>Delete \u2013 Delete an existing record<\/span><\/p>\n \u2022\u00a0\u00a0\u00a0 <\/span><\/span><\/span>Append \u2013 Append this record to another record<\/span><\/p>\n \u2022\u00a0\u00a0\u00a0 <\/span><\/span><\/span>Append To \u2013 Append another record to this record<\/span><\/p>\n \u2022\u00a0\u00a0\u00a0 <\/span><\/span><\/span>Assign \u2013 Assign this record another user<\/span><\/p>\n \u2022\u00a0\u00a0\u00a0 <\/span><\/span><\/span>Share \u2013 Share this record with another user<\/span><\/p>\n Access: Which records the user can work on<\/span><\/b><\/p>\n Users can have different privileges on different record types. The ability to execute a privilege (e.g. open a record for viewing) on a given record type is referred to as having access. \u00a0<\/span>A user is granted access based on who owns the record and how close the user is to the owner within the CRM organizational structure. There are 5 defined access levels in Microsoft CRM:<\/span><\/p>\n \u2022\u00a0\u00a0\u00a0 <\/span><\/span><\/span>No Access \u2013 Simply put, the user is not granted access.<\/span><\/p>\n \u2022\u00a0\u00a0\u00a0 <\/span><\/span><\/span>User Access \u2013 The user is granted access to only records they own<\/span><\/p>\n \u2022\u00a0\u00a0\u00a0 <\/span><\/span><\/span>Business Unit Access \u2013 The user is granted access to records owned by anyone in their current business unit. <\/span><\/p>\n \u2022\u00a0\u00a0\u00a0 <\/span><\/span><\/span>Parent Access (a.k.a. Deep Access) \u2013 The user is granted access to records owned by anyone in their business unit and to records owned by anyone in a child business unit within the organizational hierarchy<\/span><\/p>\n \u2022\u00a0\u00a0\u00a0 <\/span><\/span><\/span>Organization Access \u2013 The user is granted access to any records owned by any user within the organization.<\/span><\/p>\n Access and privilege work together to define what a user can do to a given record. For example a user may be granted User Access for the create and write privileges and Business Unit Access for the read privilege, which allows the user to view records that are owned by any user in their business unit, create their own records, and edit their own records. The user would not be able to view or edit records owned by users that were not in their business unit<\/span><\/p>\n Roles: Making security manageable<\/span><\/b><\/p>\n Microsoft CRM provides security roles as a way to manage access and privilege for each record type in CRM. Roles are analogous to Windows security groups: each CRM user is assigned one or more security roles and each security role defines the access levels and privilege for each CRM entity. <\/span><\/p>\n When a user is assigned more than one security role, the user is authorized the least restrictive access\/privilege combination from all of the assigned roles. So if a user is assigned the Sales Person security role which allows User Access for the create, read, and write privileges on a contact record and the user is also assigned the Sales Manager security role which allows Business Unit Access for the read and write privileges, then the user would have Business Unit Access for the read and write privileges since is the least restrictive combination.<\/span><\/p>\n Cascaded Access \u2013 If you own the \u201cparent\u201d you own the child<\/span><\/b><\/p>\n It turns out that there is a loophole to the security model that I call Cascaded Access. Cascaded Access basically means that if a user owns the \u201cparent\u201d record in a relationship then that user will inherit User Access to \u201cchild\u201d records associated with the parent. It is important to note that when you receive Cascaded Access to a record, you have no more privilege than you would if you owned the record. This is best explained by example.<\/span><\/p>\n Assume a CRM organization with two peer business units. Each business unit represents a sales division within the organization. Company policy is that all sales representatives are granted Organizational Access for the read, append, and append-to privileges and Business Unit Access for create and write privileges on account and contact records. Additionally, sales representatives are granted Business Unit Access on the read, append, and append-to privileges and User Access on the write and create privileges for opportunity records. All users in the organization are granted User Access for the create, read, write, and delete privilege on activities. <\/span><\/p>\n In this organization, Gail works in the business unit 1 and Jim works in business unit 2. Given the security setup, you would expect Jim to be able to see Gail\u2019s account and contact records but not her opportunity records and you would expect Gail to see Jim\u2019s account and contact records but not his opportunity records. You would also expect that they cannot see each other\u2019s activities. You would be correct. <\/span><\/p>\n However, here is the loophole. If Jim is working on an opportunity associated to an account that Gail owns, then Gail will be granted User Access to the opportunity record, even though it is owned by a user from a different business unit (which appears to violate the security role setup.) My first thought when I saw this behavior was that it was a bug. But on further thought, I realized it makes a lot of sense. After all, if I were Gail, and Jim was working on an opportunity for my account, I would certainly want to know about it and track it.<\/span><\/p>\n Cascaded security appears to apply to all user-owned record types; however, I have only verified it on accounts, contacts, opportunities, incidents and activities. In my tests, the cascading worked down three levels (i.e., I could see activities related to opportunities related to contacts related to my account) but it may have worked even deeper in the record hierarchy. One thing to note with regard to activities is that cascading only applies to activities that are actually regarding a record. Access does not cascade based on recipients.<\/span><\/p>\n Sharing and Teams\u2013 Granting access across the organization<\/span><\/b><\/p>\n If you look at the way the access levels are setup (user, business unit, parent, organization) you see that the pattern is up and down the CRM org chart. Sharing gives you a way to grant privilege across the org chart. Teams give you a way to define groups of people from anywhere on the org chart.<\/span><\/p>\n Going back to my earlier example, let\u2019s add a few more players. Kevin and Janice work with Gail in business unit 1. They both have a lot of experience with projects involving CRM integration and therefore, get brought in on certain opportunities to assist other sales reps. In order to give the access to the opportunity records they have both been added to the CRM Integration Specialist Team.<\/span><\/p>\n Jim is working on an opportunity that involves a significant integration and he needs some help. In order to get help, he sends an email off to Kevin and then goes into CRM and shares his opportunity record out to the CRM Integration Specialist Team. <\/span><\/p>\n Jim shares the record by selecting it and then going to the Actions menu and selecting Sharing. This opens a window that allows Jim to select the team and define the privileges he wants to assign to the team. (Note that he cannot share access that he doesn\u2019t have, so in this case he could not actually share access to the delete privilege.) Jim grants the team access to the read and write privileges on his opportunity record.<\/span><\/p>\n Once this is done, Kevin (and Janice) can open the opportunity record and modify it. Additionally, because of Cascading Access, he can also view all of the activities related to the opportunity that he could not have viewed previously. However, Cascading Access through sharing is more restrictive than regular Cascaded Access. Since Jim only shared access to read and write privileges on the opportunity, Kevin only has Cascaded Access to the read and write privileges on the related activities.<\/span><\/p>\n In addition to a scenario involving teams, sharing also gives users a way to temporarily turn over a record management to another user. Rather than assigning all of my accounts to another user when I go on vacation, I can just share them out and only give the level of access needed. <\/span><\/p>\n BTW sharing is also used by the CRM system to during record assignment to grant previous record owners access to the record. When you assign a record that you own to another user, the record is automatically shared back to you with all 6 privileges. This gives you the opportunity to reclaim ownership of the record (at least until the new user removes your sharing rights.)<\/span><\/p>\n","protected":false},"excerpt":{"rendered":" Continuing our tradition of introducing guest speakers, here is a post by MVP and Microsoft Partner Scott Colson. Scott is the first guest speaker for 2007. The CRM security model is a complex beast that provides a lot of granular control over who can do what with a given CRM record. I\u2019ve recently been called<\/p>\n","protected":false},"author":4391,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ms_queue_id":[],"ep_exclude_from_search":false,"_classifai_error":"","_classifai_text_to_speech_error":"","footnotes":""},"post_tag":[],"product":[],"content-type":[4690],"topic":[],"audience-type":[],"audience":[],"ms-author":[],"coauthors":[2650],"class_list":["post-14244","post","type-post","status-publish","format-standard","hentry","content-type-news-and-product-updates","review-flag-1593580425-950","review-flag-2-1593580434-938","review-flag-5-1593580450-212","review-flag-6-1593580454-668","review-flag-anywh-1593580316-165","review-flag-new-1593580245-522","review-flag-partn-1593580281-976"],"yoast_head":"\n