dynamic的一个缺点在于,我有用户表的业务级读写权限吗,在查找类型中我就能选中所有用户,但有时这群用户中应该剔除没有权限的人了。这个一般来说,dynamic自带的程序或者api没有,需要自己去写,查了网上的实例!达到的效果并没有想象中那么好!so,就只能独创门派!
一、注册一个action,给这个action的权限赋为admin
applyid:用户ID,剔除大括号
accountid:需要验证的实体数据
Message:返回的结果
二、在页面上创建一个“两个选项”的字段(用于测试用户是否有读权限)
三、写后端代码
IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext)); IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); IOrganizationService service = serviceFactory.CreateOrganizationService(Guid.Parse(context.InputParameters["applyid"] as string)); //查询客户信息 string accountid = context.InputParameters["accountid"] as string; try { //查询信息,验证是有对数据的查询权限 QueryExpression q = new QueryExpression(); q.EntityName = "account"; q.ColumnSet = new ColumnSet(true); q.Criteria.AddCondition("accountid", ConditionOperator.Equal, Guid.Parse(accountid)); EntityCollection e2 = service.RetrieveMultiple(q);//获取实体信息 //存在读权限的话返回的集合数应大于0 if (e2.Entities.Count==0) { context.OutputParameters["Message"] = "False"; } else { //存在读权限,测试是否有写权限,修改页面的“两个选项”值没有修改权限会 //直接走catch中的语句返False Entity e = e2.Entities[0]; if (Convert.ToBoolean(e.Attributes["new_test_right_control"])) { e["new_test_right_control"] = false; } else { e["new_test_right_control"] = true; } service.Update(e); context.OutputParameters["Message"] = "True"; } } catch (Exception ex) { context.OutputParameters["Message"]="False"; }