While browsing Microsoft Dynamics CRM Development Forums, i have found an interesting security privilege issue post “Both the CSR Manager and Customer Service Representative can publish articles” , after performing a test i found that the security permissions are not working regardless of the Published Article Privileges. So i decided to write up a solution that will fix the issue to help the Microsoft Dynamics CRM customers.
Microsoft Dynamics CRM 2011 (On-Premise & Online) Solution Download & Installation Steps:
1. Click here to download solution file (ArticlePublishingSecurityPrivilegeFix_1_0_0_0.zip)
2. In CRM 2011, go to Settings -> Customization -> Solutions
3. Click on Import button and Browse for the ArticlePublishingSecurityPrivilegeFix_1_0_0_0.zip file
4. During wizard, in Import Options screen makes sure to select option “Activate any process and enable
any SDK message processing steps included in the solution.”
5. Now you can verify Article Publishing Privileges
using System; |
using System.Collections.Generic; |
using System.Linq; |
using System.Text; |
using Microsoft.Xrm.Sdk; |
using Microsoft.Xrm.Sdk.Metadata; |
using Microsoft.Crm.Sdk; |
using Microsoft.Crm.Sdk.Messages; |
using Microsoft.Xrm.Sdk.Query; |
using Microsoft.Xrm.Sdk.Messages; |
namespace wod.Crm.Article.Publishing.Fix |
{ |
public class wod_Plugin : IPlugin |
{ |
public void Execute(IServiceProvider serviceProvider) |
{ |
#region Variable Declaration |
// Obtain the execution context from the service provider. |
Microsoft.Xrm.Sdk.IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext)); |
IOrganizationServiceFactory wod_serviceFactory = null; |
IOrganizationService wod_CrmService = null; |
RetrieveUserPrivilegesRequest lclRetrieveUserPrivilegesRequest = null; |
RetrieveUserPrivilegesResponse lclRetrieveUserPrivilegesResponse = null; |
Entity wod_ArticlePublishPrivEntity = null; |
#endregion |
try |
{ |
// Check if SetState message is triggered on kbarticle entity |
if (context.InputParameters.Contains("EntityMoniker") |
&& context.InputParameters["EntityMoniker"] is EntityReference |
&& ((EntityReference)context.InputParameters["EntityMoniker"]).LogicalName == "kbarticle") |
{ |
switch (context.MessageName) |
{ |
case "SetStateDynamicEntity": |
#region Article Publishing Privileges Checking Code |
// check if input parameter contains status |
if (context.InputParameters.Contains("Status")) |
{ |
// Check if status paramter value is Published Article code |
if (((OptionSetValue)context.InputParameters["Status"]).Value == -1) |
{ |
// Obtain the service factory to get the service object |
wod_serviceFactory = (IOrganizationServiceFactory)serviceProvider |
.GetService(typeof(IOrganizationServiceFactory)); |
// Obtain service object Imporsonated as plugin calling user |
wod_CrmService = wod_serviceFactory.CreateOrganizationService(context.UserId); |
// Retrieve Article publishing privilege Id |
wod_ArticlePublishPrivEntity = RetrieveEntityByAttribute(ref wod_CrmService, "privilege" |
, new string[] { "privilegeid" }, new string[] { "name" } |
, new object[] { "prvPublishArticle" }); |
if (wod_ArticlePublishPrivEntity != null) |
{ |
lclRetrieveUserPrivilegesRequest = new RetrieveUserPrivilegesRequest(); |
// Pass current user id to for retrieving all privileges |
lclRetrieveUserPrivilegesRequest.UserId = context.InitiatingUserId; |
// Retrieve user all privileges |
lclRetrieveUserPrivilegesResponse = (RetrieveUserPrivilegesResponse) wod_CrmService.Execute(lclRetrieveUserPrivilegesRequest); |
// Search if user has privileges of publishing article |
RolePrivilege wod_UserArticlePublishPriv = lclRetrieveUserPrivilegesResponse.RolePrivileges |
ToList<RolePrivilege>().Find(delegate(RolePrivilege lclPublishPriv) |
{ |
return lclPublishPriv.PrivilegeId == wod_ArticlePublishPrivEntity.Id |
&& lclPublishPriv.BusinessUnitId == context.BusinessUnitId; |
}); |
// If user does not have privileges then throw error and abort execution |
if (wod_UserArticlePublishPriv == null) |
{ |
throw new InvalidPluginExecutionException("Not enough privileges to Publish article."); |
} |
} |
} |
} |
#endregion |
break; |
} |
} |
} |
catch (System.Web.Services.Protocols.SoapException ex) |
{ |
throw new InvalidPluginExecutionException(ex.Detail.InnerText); |
} |
catch (Exception ex) |
{ |
throw new InvalidPluginExecutionException(ex.Message); |
} |
} |
#region Helper Method |
#region Helper Method |
// Helper method used to fetch entity record by column searching |
private Entity RetrieveEntityByAttribute(ref IOrganizationService CrmWebService, string EntityName |
, string[] RetrieveColumns, string[] FilterByColumns |
, object[] FilterByColumnsValue) |
{ |
QueryByAttribute wod_Query = null; |
RetrieveMultipleRequest wod_Request = null; |
RetrieveMultipleResponse wod_Response = null; |
EntityCollection wod_RtrnEntyCollection = null; |
Entity wod_RtrnEntity = null; |
try |
{ |
if (EntityName != string.Empty || RetrieveColumns != null || FilterByColumnsValue != null || FilterByColumnsValue != null) |
{ |
wod_Query = new QueryByAttribute(); |
wod_Request = new RetrieveMultipleRequest(); |
wod_Query.EntityName = EntityName; |
wod_Query.ColumnSet = new ColumnSet(RetrieveColumns); |
wod_Query.Attributes.AddRange(FilterByColumns); |
wod_Query.Values.AddRange(FilterByColumnsValue); |
wod_Request.Query = wod_Query; |
wod_Response = (RetrieveMultipleResponse)CrmWebService.Execute(wod_Request); |
wod_RtrnEntyCollection = wod_Response.EntityCollection; |
if (wod_RtrnEntyCollection != null && wod_RtrnEntyCollection.Entities.Count > 0) |
{ |
wod_RtrnEntity = (Entity)wod_RtrnEntyCollection.Entities[0]; |
} |
} |
} |
catch (System.Web.Services.Protocols.SoapException _sopEx) |
{ |
throw new Exception(_sopEx.Detail.InnerText); |
} |
catch (Exception ex) |
{ |
throw ex; |
} |
return wod_RtrnEntity; |
} |
#endregion |
} |
} |
Jehanzeb Javeed,
ReplyDeleteI'm not sure if you saw the third-to-last comment I left on the forum, but I just wanted to check to see if you are aware of this last minor issue. Here is the post again:
"The new solution file works great, except for one small detail which may have not been addressed in enough detail in the original question I posed at the start of the forum. I created a set of Security Roles to meet the KCS multi-tiered article development strategy as I mentioned in the first question posed. Our KCS 1 role corresponds to most employees who can read published articles, comment and add notes when the article needs improvement, and create articles if necessary, and your plug-in supports that fully. However, we want another role (our KCS 2) to correspond to the editor user that can edit all articles (which is granted through the Write privilege and currently supported through your plug-in) and submit them for approval so that another higher security-level user can approve them for company use. Could you edit your solution to make it so the Write privilege (which we are giving to our editors) allows them to submit drafts for approval (in other words, make it so they don't need the Publish privilege to submit an article for approval, they just need the Write privilege)?"
Thank you for your time.
Hi,
ReplyDeleteI did not check the post on forum, i will get back to you soon on this issue.
Jehanzeb,
ReplyDeleteHello. Were you able to fix the issue that only those with the Publish privilege can submit articles for approval? We want those who have Write abilities to also be able to submit articles for approval. If you could either supply me with another updated solution or briefly explain how I could go about fixing that, it would be greatly appreciated.
Thank you
Can the solution be updated so that we add restriction to the security roles to let only the owner of the article check it.
ReplyDeleteHi all,
ReplyDeleteI need to add a clarification .
Can we let only one team see certain articles.
I can do it through security roles because i can't assign in for "Business Unit"
Thank you,
I cannot *
ReplyDeletethanks
ReplyDeletethis is the code of Equal Condition
wod_ArticlePublishPrivEntity = RetrieveEntityByAttribute(ref wod_CrmService,
"privilege"
, new string[] { "privilegeid" }, new string[] { "name" }
, new object[] { "prvPublishArticle" });
but if we need not Equal Condition .so how is that possible in Crm 4?
Hi to every body, it's my first pay a quick visit of this
ReplyDeletewebpage; this website includes awesome and truly good information for readers.
Also visit my web blog - sale konferencyjne kielce
Choose whether any of your constraints are holding you back or whether you could employ the aid of others to
ReplyDeletepack in the spaces. Make the process of ordering be stress-free to complete at all times as possible.
SEO is the most prominent tool to drive a
huge traffic rate, as search engines really give closest attention to well-optimized
pages.
Look at my blog post - plus.google.com ()
Having read this I believed it was rather enlightening.
ReplyDeleteI appreciate you taking the time and energy to put this informative article together.
I once again find myself personally spending
a significant amount of time both reading and leaving comments.
But so what, it was still worth it!
Have a look at my site - vlc player (freevlcmediaplayerdownload.Blogspot.com)
Basically oxidation enables life but also slowly kills us.
ReplyDeleteTo deal with them requires a lot of strength and help from
a psychotherapist. Regardlessof whether one has
dementia, through this article we've been in a
position to see that the benefits of getting adequate nutrition can improve physical well-being and can help to boost functionality
and improve the quality of life. In short vitamins are very essential for every individual.
Also visit my website :: Procera AVH pills
Let me first begin by introducing too. I am Mei a person can call me anything you just like.
ReplyDeleteHer husband and her live in Kentucky and or even she
doesn't plan place in changing it. It's not a common thing but what she likes doing
is to read comics and he or s he is working to make it a profession. I used to be unemployed but now I am an office
clerk on the additional hand plan on changing the device.
He's been perfecting his website for a few days now. Find out about
it here: Mia Airport Parking
Review my web blog ... Mia Parking
ralph lauren outlet
ReplyDeletemichael kors handbags
coach factory outlet
michael kors outlet
toms outlet
michael kors outlet
nike basketball shoes
louis vuitton
adidas nmd
coach factory outlet
rolex submariner
kobe bryant shoes
louis vuitton
coach outlet
coach outlet
air jordan 13
nike trainers
ralph lauren polo
louis vuitton outlet
kobe bryant shoes
louis vuitton outlet
ray ban sunglasses outlet
louis vuitton handbags
toms shoes
jordan 11s
air jordan pas cher
michael kors handbags
true religion
kate spade
michael kors outlet
celine
coach outlet online
nike free run
louis vuitton outlet
michael kors outlet
ralph lauren polo
adidas shoes
louis vuitton handbags
ray-ban sunglasses
oakley sunglasses
20167.19wengdongdong
replica watches, christian louboutin outlet, nike air max, nike roshe run, jordan shoes, louis vuitton, longchamp outlet, michael kors, louis vuitton outlet, longchamp pas cher, nike free, louboutin pas cher, ray ban sunglasses, louboutin outlet, oakley sunglasses, longchamp outlet, air max, kate spade outlet, nike air max, uggs on sale, sac longchamp, polo ralph lauren outlet, louboutin shoes, ugg boots, tory burch outlet, prada handbags, cheap oakley sunglasses, burberry, tiffany and co, oakley sunglasses, tiffany jewelry, ray ban sunglasses, ray ban sunglasses, ralph lauren pas cher, longchamp, oakley sunglasses, louis vuitton outlet, replica watches, louis vuitton, louboutin, oakley sunglasses, ugg boots, gucci outlet, nike free, polo ralph lauren outlet, air jordan pas cher, nike outlet, prada outlet, chanel handbags, louis vuitton
ReplyDeletelancel, jimmy choo shoes, chi flat iron, new balance, vans, celine handbags, asics running shoes, gucci, converse, soccer jerseys, vans shoes, north face outlet, ralph lauren, reebok shoes, herve leger, nike roshe, timberland boots, ferragamo shoes, nfl jerseys, beats by dre, abercrombie and fitch, birkin bag, hollister, mac cosmetics, soccer shoes, lululemon, ghd, iphone cases, hollister, valentino shoes, longchamp, instyler, p90x workout, oakley, mcm handbags, ray ban, nike air max, babyliss, hollister, north face outlet, bottega veneta, nike trainers, insanity workout, baseball bats, louboutin, nike huarache, wedding dresses, nike air max, mont blanc, converse outlet
ReplyDeletecanada goose outlet, canada goose, replica watches, louis vuitton, montre pas cher, canada goose, doudoune canada goose, juicy couture outlet, swarovski crystal, moncler, bottes ugg, louis vuitton, canada goose, pandora jewelry, toms shoes, louis vuitton, ugg pas cher, swarovski, karen millen, juicy couture outlet, moncler, pandora charms, canada goose uk, links of london, canada goose outlet, wedding dresses, marc jacobs, pandora charms, hollister, ugg boots uk, moncler, moncler, moncler, moncler outlet, pandora jewelry, ugg,ugg australia,ugg italia, louis vuitton, supra shoes, sac louis vuitton pas cher, moncler, moncler, canada goose, coach outlet, ugg,uggs,uggs canada, thomas sabo
ReplyDeleteمن افضل شركات نقل العفش بالقاهرة هى السريع
ReplyDeleteاذا اردت نقل عفشك بامان فلا تحتار الان
شركات نقل الاثاث بفيصل
شركة نقل اثاث بحلوان
شركة نقل عفش بالقاهرة
شركة نقل اثاث بالتجمع الخامس
شركة نقل الاثاث بالتجمع الخامس
شركة مبيدات حشرية في عجمان
ReplyDeleteافضل شركة مكافحة الحشرات في الامارات
شركة مكافحة النمل الأبيض بعجمان
شركة مكافحة الفئران بعجمان
افضل شركة مكافحة الحشرات في عجمان
مكافحة حشرات عجمان
شركة عزل اسطح بعجمان
شركة نظافة بعجمان
شركات تنظيف المباني في عجمان
شركات تنظيف الكنب في عجمان
شركات تنظيف السجاد في عجمان
شركة تنظيف سجاد بالبخار بعجمان
شركة تنظيف كنب بالبخار عجمان
شركة تنظيف موكيت بالبخار بعجمان
افضل شركة تنظيف كنب بالبخار فى عجمان
تنظيف موكيت بالبخار فى عجمان
شركة تنظيف فلل بعجمان
شركة تنظيف ستائر بالبخار ام القيوين
ReplyDeleteشركة تنظيف بالبخار ام القيوين
شركة تنظيف كنب بالبخارام القيوين
شركة نظافة فى ام القيوين
شركة تنظيف فى ام القيوين
شركة تنظيف مسابح فى ام القيوين
شركات تنظيف المبانى ام القيوين
شركة تنظيف شقق فى ام القيوين
شركة تنظيف منازل ام القيوين
شركات تنظيف المنازل ام القيوين
شركة تنظيف فلل ام القيوين
شركة تلميع وجلى رخام ام القيوين
شركة مكافحة حشرات ام القيوين
شركة مكافحة الصراصير ام القيوين
شركة مكافحة الفئران ام القيوين
شركة مكافحة النمل الابيض ام القيوين
شركة مكافحة بق الفراش ام القيوين
شركة مكافحة الرمة ام القيوين
شركة تنظيف خزانات ام القيوين
ReplyDeleteشركة مكافحة حشرات بالقصيم
شركة مكافحة حمام بالقصيم
شركة مكافحة صراصير بالقصيم
شركة تسليك مجارى بالقصيم
شركة مكافحة حشرات بالقطيف
شركة رش مبيدات بالقطيف
شركة تنظيف بالقصيم
ديكورنيد
شركة مكافحة حمام بجدة
شركة تنظيف مجالس بالرياض
شركة تنظيف بالقطيف
شركة مكافحة النمل الابيض بالقطيف
مكافحة حشرات ابوظبى 0567410494 التاج الملكى
ReplyDeleteشركتنا التاج الملكى تعتبر
افضل شركة مكافحة حشرات ابوظبى
، حيث تعمل على أبادة جميع الحشرات سواء الحشرات الزاحفة أو الحشرات الطائرة، وجميع الحشرات تضر بصحة الإنسان خاصة الأطفال لذا لابد التخلص من جميع الحشرات التي تؤذي صحة الإنسان، حيث أن
شركة مكافحة الفئران ابوظبى
تستخدم شركتنا العديد من المبيدات الحشرية الغير مضرة بصحة الإنسان لأنها مصرح بها من وزارة الصحة بابوظبي، لذا فأنها أمنة جداً ولا يوجد بها ضرر، لذا لابد أن نتخلص من جميع الحشرات حتى لا يحدث للإنسان أي مكروب وذلك لم يحدث إلا عن طريق
شركة مكافحة حشرات ابوظبى
.
أهم المميزات التي تقدمها
شركة مكافحة البق ابوظبى
شركة مكافحة حشرات فى ابوظبى
شركتنا تعمل على مكافحة جميع الحشرات، حيث تعتبر أحسن
شركة مكافحة النمل الابيض ابوظبى
، وتعتبر أفضل
شركة مكافحة الثعابين ابوظبى
، من ثم نعرض لكم جميع المميزات التي تخص
شركة مكافحة الرمة ابوظبى
ReplyDeleteالحشرات تكثر الحشرات في الدول العربيّة بسبب ارتفاع درجات الحرارة وارتفاع نسبة الرطوبة في العديد من المناطق التي تطلّ على المسطّحات المائية، وتُسبّب تلك الحشرات والآفات الكثير من الضرر في حال تواجدها في المنازل أو منشآت الأعمال، خاصّةً التي تختصّ بالمنتجات الغذائية، ومن أهمّ المشاكل التي تسبّبها الحشرات في المنازل الأمراض التي تصيب قاطني المنزل خاصّةً الأطفال، والعفونة التي تصيب الأثاث والملابس المحفوظة في الخزائن.
شركة مكافحة حشرات بجازان
شركة مكافحة حشرات بخميس مشيط
شركة تنظيف خزانات بالطائف
شركة عزل اسطح بالطائف
شركة كشف تسربات المياه بالطائف
شركة نقل اثاث بالطائف
شركة مكافحة حشرات بابها
سئو برای برند ها و کسب و کار های اینترنتی من مهدی پدرام مشاور سئو و سئوکار حرفه ای هستم با هشت سال سابقه راهبری تیم های دیجیتال مارکتینگ pedramseo.ir
ReplyDeleteشرکت تابلو سازی آریو پاسارگاد در سال 1381 فعالیت خود را در زمینه تابلو سازی و اجرای نمای ساختمان آغاز نمود.از افتخارات شرکت آریو پاسارگاد دریافت لوح تقدیر از دبیر کل اجلاس صنایع ملی ایران به جهت حسن انجام فعالیت و نوآوری در زمینه تابلو سازی و کسب رتبه نخست تابلوسازی سال 95 کشور می باشد.www.tpasargad.ir
اتوبار و باربری تهران همتا بار ارائه دهنده خدمات باربری و اتوبار در استان
تهران می باشد که شما عزیزان می توانید با تکیه بر روزمه قابل اجرای شرکت
باربری تهران همتا بار این اطمینان را برای خودتان به وجود بیاورید که
اسباب کشی شما را با تخصصی که در عرصه باربری داریم به مقصد مورد نظرتان برسانیم.tehranfreight.com
میز تلویزیون -
ReplyDeleteمبل راحتی-
میز نهارخوری -
سرویس خواب نوزاد و نوجوان -
جلو مبلی و عسلی -
سرویس خواب
xiaofang20191212
ReplyDeletenike basketball shoes
moncler outlet
nike huarache
michael kors outlet
curry 5
ferragamo belt
timberland shoes
yeezy boost 350
golden goose shoes
authentic jordans
swdwe4243243243243
خدمات افراحي
ReplyDeleteتصوير اطفال فى الفجيرة
حل ارتفاع فاتورة المياه بالرياض
ReplyDeleteشركة عوازل بالرياض
شركة رش مبيدات بالرياض
شركة صيانة عامة بالرياض
شركة ترميمات بالرياض