예제 #1
0
        public bool ValidateGroups(DateTime timePoint)
        {
            InSqlClauseBuilder inSql1 = new InSqlClauseBuilder("ChildSchemaType");

            inSql1.AppendItem(SchemaInfo.FilterByCategory("Groups").ToSchemaNames());

            InSqlClauseBuilder inSql2 = new InSqlClauseBuilder("ParentSchemaType");

            inSql2.AppendItem(SchemaInfo.FilterByCategory("Organizations").ToSchemaNames());


            var all = new ConnectiveSqlClauseCollection(inSql1, inSql2, VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(timePoint));

            string sql = string.Format(@"SELECT TOP 1 1 from SC.SchemaRelationObjects WHERE ObjectID IN(
SELECT ObjectID FROM SC.SchemaRelationObjects WHERE {0} AND STATUS =1
GROUP by ObjectID
HAVING COUNT(ParentID) <>1 
)", all.ToSqlString(TSqlBuilder.Instance));

            using (DbContext context = DbContext.GetContext(this.GetConnectionName()))
            {
                Database db = DatabaseFactory.Create(context);
                using (var dr = db.ExecuteReader(CommandType.Text, sql))
                {
                    if (dr.Read())
                    {
                        return(false);
                    }
                    else
                    {
                        return(true);
                    }
                }
            }
        }
예제 #2
0
        public void ClearDbErrors()
        {
            var schemaUsers = SchemaInfo.FilterByCategory("Users").ToSchemaNames();

            InSqlClauseBuilder containerSchemaInSql = new InSqlClauseBuilder("ContainerSchemaType");

            containerSchemaInSql.AppendItem(schemaUsers);

            InSqlClauseBuilder memberSchemaInSql = new InSqlClauseBuilder("MemberSchemaType");

            containerSchemaInSql.AppendItem(schemaUsers);

            string sql = string.Format(@"
DELETE FROM SC.SchemaMembers
WHERE ContainerID = MemberID
AND {0}

DELETE FROM SC.SchemaMembersSnapshot
WHERE ContainerID = MemberID
AND {0}

DELETE FROM SC.SchemaMembersSnapshot_Current
WHERE ContainerID = MemberID
AND {0}

", new ConnectiveSqlClauseCollection(containerSchemaInSql, memberSchemaInSql).ToSqlString(TSqlBuilder.Instance));

            DbHelper.RunSql(sql, this.GetConnectionName());
        }
예제 #3
0
        public DataSet GetUserRoles2(string userValue, string appCodeName, UserValueType userValueType, RightMaskType rightMask, DelegationMaskType delegationMask, bool includeMatrixUsers)
        {
            string[] schemaTypes = SchemaInfo.FilterByCategory("Roles").ToSchemaNames();
            string[] userIDs     = OGUReaderService.SplitObjectValues(userValue);

            SCObjectAndRelationCollection users = OGUReaderService.GetSearchAdapter(GetSearchOUIDType(userValueType), SchemaInfo.FilterByCategory("Users").ToSchemaNames(), userIDs, false).QueryObjectsAndRelations();

            SchemaObjectCollection roles = SCSnapshotAdapter.Instance.QueryUserBelongToRoles(schemaTypes, appCodeName, users.ToIDArray(), false, DateTime.MinValue);

            if (includeMatrixUsers)
            {
                List <string> matachedRoleIDs = GetUserRoleIDsInMatrix(users.ToIDArray(), appCodeName);

                //过滤掉已经在之前查询过的角色
                matachedRoleIDs = matachedRoleIDs.FindAll(rID => roles.ContainsKey(rID) == false);

                if (matachedRoleIDs.Count > 0)
                {
                    InSqlClauseBuilder matrixRoleBuilder = new InSqlClauseBuilder("ID");

                    matrixRoleBuilder.AppendItem(matachedRoleIDs.ToArray());
                    SchemaObjectCollection rolesInMatrix = SchemaObjectAdapter.Instance.Load(matrixRoleBuilder, DateTime.MinValue);

                    rolesInMatrix.ForEach(rMatrix => roles.AddNotExistsItem(rMatrix, (r) => string.Compare(r.ID, rMatrix.ID, true) == 0));
                }
            }

            DataSet ds = new DataSet();

            ds.Tables.Add(QueryHelper.GetAppObjectTableBuilder(schemaTypes).Convert(roles));

            return(ds);
        }
예제 #4
0
        /// <summary>
        /// 根据指定的类别过滤对象
        /// </summary>
        /// <param name="objectSet">对象集</param>
        /// <param name="categories">过滤的类别</param>
        /// <returns></returns>
        internal IEnumerable <SchemaObjectBase> FilterNormalObjectsBySchemaCategories(IEnumerable <SchemaObjectBase> objectSet, params string[] categories)
        {
            if (categories.Length > 0)
            {
                var schemas = SchemaInfo.FilterByCategory(categories);
                foreach (var obj in objectSet)
                {
                    foreach (var schema in schemas)
                    {
                        if (obj.SchemaType == schema.Name && obj.Status == SchemaObjectStatus.Normal)
                        {
                            yield return(obj);

                            break;
                        }
                    }
                }
            }
            else
            {
                foreach (var item in objectSet)
                {
                    yield return(item);
                }
            }
        }
예제 #5
0
        public DataSet GetLeadersOfSecretaries(string strSecValues, int iSoc, string strAttrs, int iLod)
        {
            DataSet ds = new DataSet();

            ds.Tables.Add(GetMemberContainersAdapter(SchemaInfo.FilterByCategory("Users").ToSchemaNames(), GetSearchOUIDType(iSoc), SplitObjectValues(strSecValues), GetListObjectMask(iLod) != ListObjectMask.Common).Query());

            return(ds);
        }
예제 #6
0
        public DataSet GetGroupsOfUsers(string strUserValues, int iSocu, string strParentValue, int iSoco, string strAttrs, int iLod)
        {
            DataSet ds = new DataSet();

            ds.Tables.Add(GetUserContainersAdapter(SchemaInfo.FilterByCategory("Groups").ToSchemaNames(), GetSearchOUIDType(iSocu), SplitObjectValues(strUserValues), GetListObjectMask(iLod) != ListObjectMask.Common).Query());

            return(ds);
        }
예제 #7
0
        public DataSet GetUsersInGroups(string strGroupValues, int iSocg, string strAttrs, string strOrgValues, int iSoco, string strUserRankCodeName, int iLod)
        {
            DataSet ds = new DataSet();

            ds.Tables.Add(GetContainsUsersAdapter(SchemaInfo.FilterByCategory("Groups").ToSchemaNames(), GetSearchOUIDType(iSocg), SplitObjectValues(strGroupValues), GetListObjectMask(iLod) != ListObjectMask.Common).Query());

            return(ds);
        }
        public DataSet GetFunctions(string appCodeName, RightMaskType rightMask)
        {
            string[] schemaTypes = SchemaInfo.FilterByCategory("Permissions").ToSchemaNames();

            SchemaObjectCollection objs = SCSnapshotAdapter.Instance.QueryApplicationObjectsByCodeName(schemaTypes, appCodeName, false, DateTime.MinValue);

            DataSet ds = new DataSet();

            ds.Tables.Add(QueryHelper.GetAppObjectTableBuilder(schemaTypes).Convert(objs));

            return(ds);
        }
예제 #9
0
        protected void dataSourceMain_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
        {
            var allConditions = new ConnectiveSqlClauseCollection(this.DeluxeSearch.GetCondition());

            var filter = this.GetCurrentFilterType();

            if (filter != FilterSchemaType.All)
            {
                int count = 0;
                var v     = (int)filter;
                for (int i = sizeof(FilterSchemaType) * 8 - 1; i >= 0; i--)
                {
                    if ((v & 1) == 1)
                    {
                        count++;
                    }

                    v >>= 1;                     // 计算有几个位被置一
                }

                string[] categories = new string[count];
                v = 0;

                if ((filter & FilterSchemaType.User) == FilterSchemaType.User)
                {
                    categories[v++] = "Users";
                }

                if ((filter & FilterSchemaType.Group) == FilterSchemaType.Group)
                {
                    categories[v++] = "Groups";
                }

                if ((filter & FilterSchemaType.Organization) == FilterSchemaType.Organization)
                {
                    categories[v++] = "Organizations";
                }

                e.InputParameters["schemaTypes"] = SchemaInfo.FilterByCategory(categories).ToSchemaNames();
            }

            //if (this.AdvanceSearchEnabled)
            {
                var condition = this.CurrentAdvancedSearchCondition;

                WhereSqlClauseBuilder builder = ConditionMapping.GetWhereSqlClauseBuilder(condition);

                allConditions.Add(builder);
            }

            this.dataSourceMain.Condition = allConditions;
        }
        public DataSet GetFunctionsRoles(string appCodeName, string funcCodeNames)
        {
            string[] schemaTypes         = SchemaInfo.FilterByCategory("Permissions").ToSchemaNames();
            string[] permissionCodeNames = OGUReaderService.SplitObjectValues(funcCodeNames);

            SchemaObjectCollection objs = SCSnapshotAdapter.Instance.QueryPermissionRolesByCodeName(schemaTypes, appCodeName, permissionCodeNames, false, DateTime.MinValue);

            DataSet ds = new DataSet();

            ds.Tables.Add(QueryHelper.GetAppObjectTableBuilder(schemaTypes).Convert(objs));

            return(ds);
        }
        public DataSet GetUserPermissions(string userValue, string appCodeName, UserValueType userValueType, RightMaskType rightMask, DelegationMaskType delegationMask)
        {
            string[] schemaTypes = SchemaInfo.FilterByCategory("Roles").ToSchemaNames();
            string[] userIDs     = OGUReaderService.SplitObjectValues(userValue);

            SCObjectAndRelationCollection users = OGUReaderService.GetSearchAdapter(GetSearchOUIDType(userValueType), SchemaInfo.FilterByCategory("Users").ToSchemaNames(), userIDs, false).QueryObjectsAndRelations();

            SchemaObjectCollection roles = SCSnapshotAdapter.Instance.QueryUserBelongToPermissions(schemaTypes, appCodeName, users.ToIDArray(), false, DateTime.MinValue);

            DataSet ds = new DataSet();

            ds.Tables.Add(QueryHelper.GetAppObjectTableBuilder(schemaTypes).Convert(roles));

            return(ds);
        }
예제 #12
0
        public static AUAdminScopeTypeCollection GetAdminScopeTypes()
        {
            AUAdminScopeTypeCollection all = new AUAdminScopeTypeCollection();

            var schemas = SchemaInfo.FilterByCategory("AUScopeItems");

            foreach (var item in schemas)
            {
                all.Add(new AUAdminScopeType()
                {
                    SchemaName = item.Description, SchemaType = item.Name
                });
            }

            return(all);
        }
        public DataSet GetChildrenInRoles(string orgRoot, string appCodeName, string roleCodeNames, bool doesMixSort, bool doesSortRank, bool includeDelegate)
        {
            string[] schemaTypes = SchemaInfo.FilterByCategory("Roles").ToSchemaNames();
            string[] roleIDs     = OGUReaderService.SplitObjectValues(roleCodeNames);

            bool removeDuplicateData = GetMethodSettingAttributeValue("GetChildrenInRoles", "removeDuplicateData", false);

            SCObjectAndRelationCollection relations = SCSnapshotAdapter.Instance.QueryRolesContainsMembers(schemaTypes, appCodeName, roleIDs, removeDuplicateData, false, DateTime.MinValue);

            relations.FillDetails();

            DataSet ds = new DataSet();

            ds.Tables.Add(QueryHelper.GetOguTableBuilder(new string[] { "OguObject" }).Convert(relations));

            return(ds);
        }
예제 #14
0
        protected override void OnPreRender(EventArgs e)
        {
            if (this.views.ActiveViewIndex == 0)
            {
                var dic = SCSnapshotAdapter.Instance.QueryCountGroupBySchema(DateTime.MinValue);

                this.ConfigMetro(dic, SchemaInfo.FilterByCategory("Users").ToSchemaNames(), this.ltMemberCount);
                this.ConfigMetro(dic, "Groups", this.ltGroupCount);
                this.ConfigMetro(dic, "Organizations", this.ltOrgCount);
                this.ConfigMetro(dic, "Applications", this.ltAppCount);
                this.logItems.DataSource = SCOperationLogAdapter.Instance.LoadRecentSummaryLog(5);
                this.logItems.DataBind();
            }

            Util.ConfigToggleViewButton(this.gridViews.ActiveViewIndex, this.lnkViewMode, this.lblViewMode);

            base.OnPreRender(e);
        }
        protected override void OnBuildQueryCondition(QueryCondition qc)
        {
            qc.FromClause   = TimePointContext.Current.UseCurrentTime ? "SC.SchemaObjectSnapshot_Current O INNER JOIN SC.SchemaRelationObjectsSnapshot_Current R ON O.ID = R.ObjectID" : "SC.SchemaObjectSnapshot O INNER JOIN SC.SchemaRelationObjectsSnapshot R ON O.ID = R.ObjectID";
            qc.SelectFields = "O.*,R.ParentID,R.FullPath";
            if (string.IsNullOrEmpty(qc.OrderByClause))
            {
                qc.OrderByClause = "R.InnerSort ASC";
            }

            qc.WhereClause.IsNotEmpty((s) => qc.WhereClause += " AND ");
            InSqlClauseBuilder inSql = new InSqlClauseBuilder("O.SchemaType");

            if (this.schemaTypes != null && this.schemaTypes.Length > 0)
            {
                inSql.AppendItem(this.schemaTypes);
            }
            else
            {
                var config = ObjectSchemaSettings.GetConfig();
                inSql.AppendItem(SchemaInfo.FilterByCategory("Users", "Groups", "Organizations").ToSchemaNames());
                if (inSql.IsEmpty)
                {
                    throw new ApplicationException("配置中不存在任何可用的Schema");
                }
            }

            var timeCondition1 = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("R.");

            var where = new WhereSqlClauseBuilder();
            where.AppendItem("R.Status", (int)SchemaObjectStatus.Normal);
            where.AppendItem("R.ParentSchemaType", "Organizations");

            if (startPath.IsNotEmpty())
            {
                where.AppendItem("R.FullPath", TSqlBuilder.Instance.EscapeLikeString(startPath) + "%", "LIKE");
            }

            var timeCondition2 = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("O.");

            where.AppendItem("O.Status", (int)SchemaObjectStatus.Normal);

            qc.WhereClause += new ConnectiveSqlClauseCollection(timeCondition1, timeCondition2, where, inSql).ToSqlString(TSqlBuilder.Instance);
        }
        public IList <RoleDisplayItem> LoadByRoleIds(string[] ids)
        {
            IList <RoleDisplayItem> result = null;

            if (ids.Length > 0 && ids.Length > 0)
            {
                string sql = @"SELECT O.*, A.ID AS AppID, A.Name As AppName, A.DisplayName AS AppDisplayName FROM  
 SC.SchemaObjectSnapshot O INNER JOIN SC.SchemaMembersSnapshot R ON R.MemberID = O.ID
 INNER JOIN SC.SchemaObjectSnapshot_Current A ON R.ContainerID = A.ID
 WHERE ";

                InSqlClauseBuilder inBuilder1 = new InSqlClauseBuilder("O.SchemaType");
                inBuilder1.AppendItem(SchemaInfo.FilterByCategory("Roles").ToSchemaNames());

                InSqlClauseBuilder inBuilder2 = new InSqlClauseBuilder("O.ID");
                inBuilder2.AppendItem(ids);

                var timeLimit1 = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("O.");
                var timeLimit2 = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("R.");

                WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder();
                builder.AppendItem("O.Status", (int)SchemaObjectStatus.Normal);
                builder.AppendItem("R.Status", (int)SchemaObjectStatus.Normal);

                sql += new ConnectiveSqlClauseCollection(inBuilder1, inBuilder2, timeLimit1, timeLimit2, builder).ToSqlString(TSqlBuilder.Instance);

                DataTable table = DbHelper.RunSqlReturnDS(sql, this.GetConnectionName()).Tables[0];

                result = new List <RoleDisplayItem>(table.Rows.Count);
                foreach (DataRow row in table.Rows)
                {
                    var obj = new RoleDisplayItem();
                    ORMapping.DataRowToObject(row, obj);
                    result.Add(obj);
                }
            }
            else
            {
                result = new List <RoleDisplayItem>();
            }

            return(result);
        }
예제 #17
0
        public DataSet GetUserPermissions2(string userValue, string appCodeName, UserValueType userValueType, RightMaskType rightMask, DelegationMaskType delegationMask, bool includeMatrixUsers)
        {
            string[] schemaTypes = SchemaInfo.FilterByCategory("Roles").ToSchemaNames();
            string[] userIDs     = OGUReaderService.SplitObjectValues(userValue);

            SCObjectAndRelationCollection users = OGUReaderService.GetSearchAdapter(GetSearchOUIDType(userValueType), SchemaInfo.FilterByCategory("Users").ToSchemaNames(), userIDs, false).QueryObjectsAndRelations();

            SchemaObjectCollection permissions = SCSnapshotAdapter.Instance.QueryUserBelongToPermissions(schemaTypes, appCodeName, users.ToIDArray(), false, DateTime.MinValue);

            if (includeMatrixUsers)
            {
                string[] permissionTypes = SchemaInfo.FilterByCategory("Permissions").ToSchemaNames();

                List <string> roleIDsInMatrix = GetUserRoleIDsInMatrix(users.ToIDArray(), appCodeName);

                SCObjectAndRelationCollection permissionsInMatrixRelation = SCSnapshotAdapter.Instance.QueryObjectAndRelationByParentIDs(permissionTypes, roleIDsInMatrix.ToArray(), false, true, false, DateTime.MinValue);

                InSqlClauseBuilder inBuilder = new InSqlClauseBuilder("ID");

                List <string> permissionInMatrixIDs = new List <string>();

                foreach (SCObjectAndRelation pim in permissionsInMatrixRelation)
                {
                    if (permissions.ContainsKey(pim.ID) == false)
                    {
                        inBuilder.AppendItem(pim.ID);
                    }
                }

                if (inBuilder.IsEmpty == false)
                {
                    SchemaObjectCollection permissionsInMatrix = SchemaObjectAdapter.Instance.Load(inBuilder, DateTime.MinValue);

                    permissions.CopyFrom(permissionsInMatrix);
                }
            }

            DataSet ds = new DataSet();

            ds.Tables.Add(QueryHelper.GetAppObjectTableBuilder(schemaTypes).Convert(permissions));

            return(ds);
        }
예제 #18
0
        static UnitBrowseDialog()
        {
            profiles = new Dictionary <string, SchemaProfile>();

            foreach (var schema in SchemaInfo.FilterByCategory("Users"))
            {
                profiles[schema.Name] = new SchemaProfile(true, ControlResources.UserLogoUrl, ControlResources.UserLogoUrl, "pc-usernode");
            }

            foreach (var schema in SchemaInfo.FilterByCategory("Organizations"))
            {
                profiles[schema.Name] = new SchemaProfile(false, ControlResources.OULogoUrl, ControlResources.OULogoUrl, "pc-orgnode");
            }

            foreach (var schema in SchemaInfo.FilterByCategory("Groups"))
            {
                profiles[schema.Name] = new SchemaProfile(true, ControlResources.GroupLogoUrl, ControlResources.GroupLogoUrl, "pc-groupnode");
            }
        }
예제 #19
0
        protected void dataSourceMain_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
        {
            if (this.IsPostBack == false)
            {
                e.Cancel = true;
            }
            else
            {
                e.InputParameters["startPath"]   = this.StartFullPath;
                e.InputParameters["schemaTypes"] = null;

                //if (this.AdvanceSearchEnabled)
                {
                    var condition = this.CurrentAdvancedSearchCondition;

                    WhereSqlClauseBuilder builder = ConditionMapping.GetWhereSqlClauseBuilder(condition);

                    this.dataSourceMain.Condition = new ConnectiveSqlClauseCollection(builder, this.DeluxeSearch.GetCondition());
                    switch (condition.SchemaTypeOption)
                    {
                    case 1:
                        e.InputParameters["schemaTypes"] = SchemaInfo.FilterByCategory("Users").ToSchemaNames();
                        break;

                    case 2:
                        e.InputParameters["schemaTypes"] = SchemaInfo.FilterByCategory("Groups").ToSchemaNames();
                        break;

                    case 3:
                        e.InputParameters["schemaTypes"] = SchemaInfo.FilterByCategory("Organizations").ToSchemaNames();
                        break;

                    default:
                        break;
                    }
                }
                //else
                //{
                //    this.dataSourceMain.Condition = this.DeluxeSearch.GetCondition();
                //}
            }
        }
예제 #20
0
        protected override void DoValidate(object objectToValidate, object currentObject, string key, ValidationResults validateResults)
        {
            bool isValid = false;
            var  types   = SchemaInfo.FilterByCategory("AdminScopeItems");

            foreach (var item in types)
            {
                if (item.Name.Equals(objectToValidate))
                {
                    isValid = true;
                    break;
                }
            }

            if (isValid == false)
            {
                SchemaObjectBase doValidateObj          = (SchemaObjectBase)currentObject;
                ObjectSchemaConfigurationElement config = ObjectSchemaSettings.GetConfig().Schemas[doValidateObj.SchemaType];
                this.RecordValidationResult(validateResults, string.Format(this.MessageTemplate, string.IsNullOrEmpty(config.Description) ? config.Description : config.Name, doValidateObj.Properties["Name"].StringValue, doValidateObj.ID), doValidateObj, key);
            }
        }
예제 #21
0
        /// <summary>
        /// 获取可用的操作类型
        /// </summary>
        /// <param name="keys"></param>
        /// <returns><see cref="TransferObjectType"/>的组合值</returns>
        internal static TransferObjectType GetAvailableOperation(string[] keys)
        {
            TransferObjectType result = TransferObjectType.None;

            if (keys != null)
            {
                var  relations    = DbUtil.LoadCurrentParentRelations(keys, SchemaInfo.FilterByCategory("Organizations").ToSchemaNames());
                bool existRootOrg = false;

                foreach (var r in relations)
                {
                    if (Util.IsOrganization(r.ChildSchemaType) && r.ParentID == PC.SCOrganization.RootOrganizationID)
                    {
                        existRootOrg = true; // 一级组织原则上不允许转移,如果含有一级组织,则什么都做不成
                        break;
                    }
                }

                if (existRootOrg == false)
                {
                    foreach (var item in DbUtil.LoadObjects(keys))
                    {
                        if (item is SCUser)
                        {
                            result |= TransferObjectType.Members;
                        }
                        else if (item is SCGroup)
                        {
                            result |= TransferObjectType.Groups;
                        }
                        else if (item is SCOrganization)
                        {
                            result |= TransferObjectType.Orgnizations;
                        }
                    }
                }
            }

            return(result);
        }
예제 #22
0
        public DataSet GetRolesUsers2(string orgRoot, string appCodeName, string roleCodeNames, DelegationMaskType delegationMask, SidelineMaskType sidelineMask, string extAttr, bool includeMatrixUsers)
        {
            string[] schemaTypes = SchemaInfo.FilterByCategory("Roles").ToSchemaNames();
            string[] roleIDs     = OGUReaderService.SplitObjectValues(roleCodeNames);

            bool removeDuplicateData = GetMethodSettingAttributeValue("GetChildrenInRoles", "removeDuplicateData", false);

            SCObjectAndRelationCollection relations = SCSnapshotAdapter.Instance.QueryRolesContainsUsers(schemaTypes, appCodeName, roleIDs, removeDuplicateData, false, DateTime.MinValue);

            if (includeMatrixUsers)
            {
                FillRoleMatrixRelations(relations, schemaTypes, roleIDs);
            }

            relations.FillDetails();

            DataSet ds = new DataSet();

            ds.Tables.Add(QueryHelper.GetOguTableBuilder(SchemaInfo.FilterByCategory("Users").ToSchemaNames()).Convert(relations));

            return(ds);
        }
예제 #23
0
        protected override void ValidateObjects()
        {
            WhereSqlClauseBuilder bd = new WhereSqlClauseBuilder();

            bd.AppendItem("Status", (int)SchemaObjectStatus.Normal);

            InSqlClauseBuilder inB = new InSqlClauseBuilder("ObjectID");

            inB.AppendItem(this.SourceKeys);

            InSqlClauseBuilder inC = new InSqlClauseBuilder("ParentSchemaType");

            inC.AppendItem(SchemaInfo.FilterByCategory("Organizations").ToSchemaNames());

            InSqlClauseBuilder inD = new InSqlClauseBuilder("Groups");

            inC.AppendItem(SchemaInfo.FilterByCategory("Groups").ToSchemaNames());

            this.relations = SchemaRelationObjectAdapter.Instance.Load(new ConnectiveSqlClauseCollection(bd, inB, inC, inD, VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder()), DateTime.MinValue);
            this.parents   = DbUtil.LoadObjects(this.relations.ToParentIDArray());

            base.ValidateObjects();
        }
        protected override void DoValidate(object objectToValidate, object currentObject, string key, ValidationResults validateResults)
        {
            string typeString      = (string)objectToValidate;
            string messageTemplate = string.IsNullOrEmpty(this.MessageTemplate) ? "{0}包含无效或重复的的管理范围类别字符串:{1}" : this.MessageTemplate;

            string[] parts = typeString.Split(AUCommon.Spliter, StringSplitOptions.RemoveEmptyEntries);

            // 准备有效项的集合
            HashSet <string> effected = new HashSet <string>();
            HashSet <string> repeated = new HashSet <string>();

            foreach (var item in SchemaInfo.FilterByCategory("AUScopeItems"))
            {
                effected.Add(item.Name);
            }

            // 检查有效项
            foreach (var item in parts)
            {
                if (effected.Contains(item) == false)
                {
                    this.RecordValidationResult(validateResults, string.Format(messageTemplate, AUCommon.DisplayNameFor((SchemaObjectBase)currentObject), item), currentObject, key);
                    break;
                }

                if (repeated.Contains(item))
                {
                    this.RecordValidationResult(validateResults, string.Format(messageTemplate, AUCommon.DisplayNameFor((SchemaObjectBase)currentObject), item), currentObject, key);
                    break;
                }
                else
                {
                    repeated.Add(item);
                }
            }
        }
예제 #25
0
        protected void ResetPass(object sender, EventArgs e)
        {
            var users = PC.Adapters.SchemaObjectAdapter.Instance.LoadByCodeNameAndSchema(SchemaInfo.FilterByCategory("Users").ToSchemaNames(), new string[] { this.userCodeName.Text }, true, false, DateTime.MinValue).FilterByStatus(SchemaObjectStatusFilterTypes.Normal);

            if (users.Count > 0)
            {
                var user = (PC.SCUser)users[0];
                PC.Adapters.UserPasswordAdapter.Instance.SetPassword(user.ID, PC.Adapters.UserPasswordAdapter.GetPasswordType(), PC.Adapters.UserPasswordAdapter.GetDefaultPassword());
                this.prompt.InnerText = user.DisplayName + "(" + user.CodeName + ")" + "已设置密码";
            }
            else
            {
                this.prompt.InnerText = "未找到指定的人";
            }
        }
예제 #26
0
        protected void dataSourceMain_Selected(object sender, ObjectDataSourceStatusEventArgs e)
        {
            if (e.ReturnValue is DataView && Util.SuperVisiorMode == false)
            {
                var view = e.ReturnValue as DataView;

                string[] ids = new string[view.Count];
                for (int i = 0; i < view.Count; i++)
                {
                    ids[i] = view[i]["ID"].ToString();
                }

                this.relations = ids.Length > 0 ? DbUtil.LoadCurrentParentRelations(ids, SchemaInfo.FilterByCategory("Organizations").ToSchemaNames()) : new SCRelationObjectCollection();

                this.acls = this.relations.Count > 0 ? SCAclAdapter.Instance.LoadCurrentContainerAndPermissions(Util.CurrentUser.ID, this.relations.ToParentIDArray()) : new SCContainerAndPermissionCollection();
            }
        }
예제 #27
0
        protected override void OnPreRender(EventArgs e)
        {
            var parentIds = DbUtil.LoadCurrentParentRelations(new string[] { this.UserObject.ID }, SchemaInfo.FilterByCategory("Organizations").ToSchemaNames()).ToParentIDArray();

            var containerPermissions = parentIds.Length > 0 ? SCAclAdapter.Instance.LoadCurrentContainerAndPermissions(Util.CurrentUser.ID, parentIds) : new SCContainerAndPermissionCollection();

            bool enabled = false;

            for (int i = parentIds.Length - 1; i >= 0; i--)
            {
                enabled |= Util.ContainsPermission(containerPermissions, parentIds[i], "UpdateChildren");
            }

            this.hasSelfRight = enabled;

            this.hfSelfID.Value = this.UserObject.ID;

            Util.ConfigToggleViewButton(this.views.ActiveViewIndex, this.lnkViewMode, this.lblViewMode);
            base.OnPreRender(e);
        }
예제 #28
0
        protected override void OnBuildQueryCondition(QueryCondition qc)
        {
            qc.SelectFields = "U.*,ParentID='' ";
            qc.FromClause   = TimePointContext.Current.UseCurrentTime ? "SC.SchemaUserSnapshot_Current U " : "SC.SchemaUserSnapshot U ";

            if (qc.OrderByClause.IsNullOrEmpty())
            {
                qc.OrderByClause = "U.VersionStartTime DESC";
            }

            if (this.fileterRole && this.parentPermissions != null)
            {
                var joinClause = TimePointContext.Current.UseCurrentTime ?
                                 @" INNER JOIN SC.SchemaRelationObjectsSnapshot_Current R ON R.ObjectID = U.ID INNER JOIN SC.Acl_Current AC ON AC.ContainerID = R.ParentID INNER JOIN SC.SchemaRoleSnapshot_Current RS ON RS.ID = AC.MemberID INNER JOIN SC.UserAndContainerSnapshot_Current UC ON RS.ID = UC.ContainerID "
                                        :
                                 @" INNER JOIN SC.SchemaRelationObjectsSnapshot R ON R.ObjectID = U.ID INNER JOIN SC.Acl AC ON AC.ContainerID = R.ParentID INNER JOIN SC.SchemaRoleSnapshot RS ON RS.ID = AC.MemberID INNER JOIN SC.UserAndContainerSnapshot UC ON RS.ID = UC.ContainerID ";
                qc.FromClause += joinClause;
            }

            qc.WhereClause.IsNotEmpty((s) => qc.WhereClause += " AND ");

            WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder();

            builder.AppendItem("U.Status", (int)SchemaObjectStatus.Normal);

            var timeCondition = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("U.");

            var allConditions = new ConnectiveSqlClauseCollection(builder, timeCondition);

            if (this.fileterRole && this.logonUserID != null && this.parentPermissions != null)
            {
                allConditions.Add(VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("AC."));
                allConditions.Add(VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("RS."));
                allConditions.Add(VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("UC."));
                builder.AppendItem("AC.Status", (int)SchemaObjectStatus.Normal);
                builder.AppendItem("RS.Status", (int)SchemaObjectStatus.Normal);
                builder.AppendItem("UC.Status", (int)SchemaObjectStatus.Normal);
                builder.AppendItem("UC.UserID", this.logonUserID);

                allConditions.Add(DataSourceUtil.SchemaTypeCondition("R.ParentSchemaType", SchemaInfo.FilterByCategory("Organizations").ToSchemaNames()));

                allConditions.Add(VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("R."));
                if (parentPermissions.Length > 0)
                {
                    InSqlClauseBuilder inSql1 = new InSqlClauseBuilder("AC.ContainerPermission");
                    inSql1.AppendItem(this.parentPermissions);
                    allConditions.Add(inSql1);
                }
            }

            if (this.excludeID != null)
            {
                builder.AppendItem("U.ID", this.excludeID, "<>");
            }

            if (this.defaultOnly)
            {
                builder.AppendItem("R.IsDefault", 1);
            }

            if (this.dissociate)
            {
                var timeConditionIn = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("RR.");

                WhereSqlClauseBuilder innerWhere = new WhereSqlClauseBuilder();
                innerWhere.AppendItem("RR.Status", (int)SchemaObjectStatus.Normal);

                InSqlClauseBuilder innerInParent = new InSqlClauseBuilder("RR.ParentSchemaType");
                innerInParent.AppendItem(SchemaInfo.FilterByCategory("Organizations").ToSchemaNames());

                allConditions.Add(new ExistExpressionBuilder(true, string.Format(@"SELECT TOP 1 1 FROM SC.SchemaRelationObjects RR WHERE 
RR.ObjectID = U.ID AND RR.ChildSchemaType = U.SchemaType AND {0}", new ConnectiveSqlClauseCollection(timeConditionIn, innerWhere, innerInParent).ToSqlString(TSqlBuilder.Instance))));
            }

            qc.WhereClause += allConditions.ToSqlString(TSqlBuilder.Instance);
        }
예제 #29
0
 public OguObjectCollection <IOguObject> QueryDescendants(IOrganization parent, string prefix, int maxCount)
 {
     return(this.QueryDescendants <IOguObject>(parent, prefix, maxCount, SchemaInfo.FilterByCategory("Users", "Groups", "Organizations").ToSchemaNames()));
 }
예제 #30
0
        public IEnumerable <IOguObject> GetChildren(IOrganization parent)
        {
            SCObjectAndRelationCollection relations = SCSnapshotAdapter.Instance.QueryObjectAndRelationByParentIDs(SchemaInfo.FilterByCategory("Users", "Groups", "Organizations").ToSchemaNames(), new string[] { parent.ID }, false, true, false, DateTime.MinValue);

            relations.FillDetails();

            var parentList = SCSnapshotAdapter.Instance.LoadAllParentsInfo(true, parent.ID)[parent.ID];

            StringBuilder strB = new StringBuilder(parentList.Count * 15);

            for (int i = 0; i < parentList.Count; i++)
            {
                strB.Append(parentList[i].Name);
                strB.Append("");
            }

            var parentPath = strB.ToString();

            foreach (var item in relations)
            {
                OguBase ogu = (OguBase)item.Detail.ToPhantom();
                ogu.FullPath = parentPath + ogu.Name;

                yield return(ogu);
            }
        }