Ejemplo n.º 1
0
        private void ApplyEnabledPrivileges(PrivilegeTypes enabledPrivileges)
        {
            bool isNone = (enabledPrivileges & PrivilegeTypes.None) != PrivilegeTypes.None;

            if (isNone || (enabledPrivileges & PrivilegeTypes.Select) != PrivilegeTypes.Select)
            {
                chkSelect.Enabled = false;
            }

            if (isNone || (enabledPrivileges & PrivilegeTypes.Execute) != PrivilegeTypes.Execute)
            {
                chkExecute.Enabled = false;
            }

            if (isNone || (enabledPrivileges & PrivilegeTypes.Refs) != PrivilegeTypes.Refs)
            {
                chkRefs.Enabled = false;
            }

            if (isNone || (enabledPrivileges & PrivilegeTypes.Insert) != PrivilegeTypes.Insert)
            {
                chkInsert.Enabled = false;
            }

            if (isNone || (enabledPrivileges & PrivilegeTypes.Update) != PrivilegeTypes.Update)
            {
                chkUpdate.Enabled = false;
            }

            if (isNone || (enabledPrivileges & PrivilegeTypes.Delete) != PrivilegeTypes.Delete)
            {
                chkDelete.Enabled = false;
            }
        }
Ejemplo n.º 2
0
        public bool HasEntityPrivilege(PAUser user, EntityReference entityId, PrivilegeTypes privilegeType)
        {
            var metaDateType = _paMetadataServiceCacheProxy.GetEntityMetadata(entityId.LogicalName);

            if (metaDateType.OwnershipType.HasValue)
            {
                switch (metaDateType.OwnershipType.Value)
                {
                case Microsoft.Xrm.Sdk.Metadata.OwnershipTypes.UserOwned:

                    RetrievePrincipalAccessRequest request = new RetrievePrincipalAccessRequest();
                    request.Principal = new EntityReference("systemuser", user.EntityRecord.Id);
                    request.Target    = entityId;
                    IOrganizationService orgService = ContextContainer.GetValue <IOrganizationService>(ContextTypes.OrgService);
                    var response = (RetrievePrincipalAccessResponse)orgService.Execute(request);


                    if (response.AccessRights.HasFlag((AccessRights)(int)privilegeType))
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }

                case Microsoft.Xrm.Sdk.Metadata.OwnershipTypes.OrganizationOwned:
                    var result = HasEntityPrivilege(user, entityId.LogicalName, privilegeType, PrivilegeDepths.Basic);
                    return(result);

                default:
                    return(false);
                }
            }
            else
            {
                var fragment = new TextFragment()
                {
                    Code = TextCodes.EntityNotCheckPrivilege,
                    DefaultFormatting = "实体{0}无法判断权限,它的OwnershipType为空",
                    ReplaceParameters = new List <object>()
                    {
                        entityId.LogicalName
                    }
                };

                throw new UtilityException((int)Errors.EntityNotCheckPrivilege, fragment);
            }
        }
Ejemplo n.º 3
0
        public static bool ShowChangePrivilegesDlg(PrivilegeTypes enabledPrivileges, ref PrivilegeTypes result)
        {
            frmChangePrivileges frm = new frmChangePrivileges();

            frm.ApplyEnabledPrivileges(enabledPrivileges);

            if (frm.ShowDialog() == DialogResult.OK)
            {
                result = frm.GetSelectedPrivileges();
                return(true);
            }
            else
            {
                result = PrivilegeTypes.None;
                return(false);
            }
        }
Ejemplo n.º 4
0
        private PrivilegeTypes GetSelectedPrivileges()
        {
            PrivilegeTypes result = PrivilegeTypes.None;

            if (chkSelect.Checked)
            {
                result = result | PrivilegeTypes.Select;
            }

            if (chkExecute.Checked)
            {
                result = result | PrivilegeTypes.Execute;
            }

            if (chkRefs.Checked)
            {
                result = result | PrivilegeTypes.Refs;
            }

            if (chkInsert.Checked)
            {
                result = result | PrivilegeTypes.Insert;
            }

            if (chkUpdate.Checked)
            {
                result = result | PrivilegeTypes.Update;
            }

            if (chkDelete.Checked)
            {
                result = result | PrivilegeTypes.Delete;
            }

            return(result);
        }
Ejemplo n.º 5
0
        private PrivilegeTypes GetVisiblePrivilegeTypes()
        {
            PrivilegeTypes result = PrivilegeTypes.None;

            if (colselect.Visible)
            {
                result = result | PrivilegeTypes.Select;
            }

            if (colexecute.Visible)
            {
                result = result | PrivilegeTypes.Execute;
            }

            if (colreferences.Visible)
            {
                result = result | PrivilegeTypes.Refs;
            }

            if (colinsert.Visible)
            {
                result = result | PrivilegeTypes.Insert;
            }

            if (colupdate.Visible)
            {
                result = result | PrivilegeTypes.Update;
            }

            if (coldelete.Visible)
            {
                result = result | PrivilegeTypes.Delete;
            }

            return(result);
        }
Ejemplo n.º 6
0
        public bool HasEntityPrivilege(PAUser user, string EntityName, PrivilegeTypes privilegeType, PrivilegeDepths privilegeDepth)
        {
            if (EntityName.ToLower().Equals("systemuser"))
            {
                EntityName = "user";
            }

            PrivilegeDepths enumMark         = PrivilegeDepths.None;
            StringBuilder   strPrivilegeName = new StringBuilder("prv");

            strPrivilegeName.Append(privilegeType.ToString());
            strPrivilegeName.Append(EntityName);

            string privilegeName = strPrivilegeName.ToString();

            IOrganizationService orgService = ContextContainer.GetValue <IOrganizationService>(ContextTypes.OrgService.ToString());

            string strFetch = string.Format(@"<fetch version=""1.0"" output-format=""xml - platform"" mapping=""logical"" distinct=""false"" aggregate=""true"">
                                <entity name = ""privilege"" >
                                        <link-entity name=""roleprivileges"" intersect=""true"" visible=""false"" to=""privilegeid"" from=""privilegeid"" alias = ""aa"">
                                            <attribute name=""privilegedepthmask"" alias=""maxmask"" aggregate=""max""/>  

                                            <link-entity name = ""role"" to = ""roleid"" from = ""parentrootroleid"" alias = ""ad"" >

                                                <link-entity name = ""systemuserroles"" to = ""roleid"" from = ""roleid"" alias = ""ab"" >
                                                    <link-entity name = ""systemuser"" to = ""systemuserid"" from = ""systemuserid"" alias = ""ac"" >
                                                        <filter type = ""and"" >     
                                                            <condition attribute=""systemuserid"" value=""{1}"" operator=""eq"" uitype=""systemuser"" />
                                                        </filter> 
                                                    </link-entity>  
                                                </link-entity>      
           
                                            </link-entity>   
  
                                        </link-entity>

                                    <filter type = ""and"" >     
                                        <condition attribute = ""name"" value = ""{2}"" operator= ""eq"" />
                                    </filter> 
                                </entity>
                               </fetch>", ((int)privilegeDepth).ToString(), user.EntityRecord.Id.ToString(), strPrivilegeName);

            var entityCollection = orgService.RetrieveMultiple(new FetchExpression(strFetch));

            if (entityCollection.Entities.Count > 0)
            {
                var mask = (AliasedValue)entityCollection.Entities[0].Attributes["maxmask"];

                if (mask.Value == null)
                {
                    return(false);
                }
                enumMark = (PrivilegeDepths)mask.Value;
            }

            if (enumMark != PrivilegeDepths.None && (int)enumMark >= (int)privilegeDepth)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Ejemplo n.º 7
0
        private void ChangeSelectedObjectPrivileges()
        {
            if (grd.SelectedRows.Count == 0)
            {
                return;
            }

            PrivilegeTypes result = PrivilegeTypes.None;

            if (!frmChangePrivileges.ShowChangePrivilegesDlg(GetVisiblePrivilegeTypes(), ref result))
            {
                return;
            }

            foreach (DataGridViewRow row in grd.SelectedRows)
            {
                bool isNone = (result & PrivilegeTypes.None) != PrivilegeTypes.None;

                if (colselect.Visible)
                {
                    if (isNone || (result & PrivilegeTypes.Select) != PrivilegeTypes.Select)
                    {
                        row.Cells[colselect.Name].Value = false;
                    }
                    else
                    {
                        row.Cells[colselect.Name].Value = true;
                    }
                }

                if (colexecute.Visible)
                {
                    if (isNone || (result & PrivilegeTypes.Execute) != PrivilegeTypes.Execute)
                    {
                        row.Cells[colexecute.Name].Value = false;
                    }
                    else
                    {
                        row.Cells[colexecute.Name].Value = true;
                    }
                }

                if (colreferences.Visible)
                {
                    if (isNone || (result & PrivilegeTypes.Refs) != PrivilegeTypes.Refs)
                    {
                        row.Cells[colreferences.Name].Value = false;
                    }
                    else
                    {
                        row.Cells[colreferences.Name].Value = true;
                    }
                }

                if (colinsert.Visible)
                {
                    if (isNone || (result & PrivilegeTypes.Insert) != PrivilegeTypes.Insert)
                    {
                        row.Cells[colinsert.Name].Value = false;
                    }
                    else
                    {
                        row.Cells[colinsert.Name].Value = true;
                    }
                }

                if (colupdate.Visible)
                {
                    if (isNone || (result & PrivilegeTypes.Update) != PrivilegeTypes.Update)
                    {
                        row.Cells[colupdate.Name].Value = false;
                    }
                    else
                    {
                        row.Cells[colupdate.Name].Value = true;
                    }
                }

                if (coldelete.Visible)
                {
                    if (isNone || (result & PrivilegeTypes.Delete) != PrivilegeTypes.Delete)
                    {
                        row.Cells[coldelete.Name].Value = false;
                    }
                    else
                    {
                        row.Cells[coldelete.Name].Value = true;
                    }
                }
            }
        }