Example #1
0
        /// <summary>
        /// 新增模块。
        /// </summary>
        /// <param name="dto">待新增模块的信息。</param>
        /// <returns>新模块的Id。(-2:Tag重复。)</returns>
        public static string InsertModule(ModuleDTO dto)
        {
            Module existingM = GetModuleByTag(dto.Tag);
            if (existingM != null) { return "-2"; }

            Db.SessionFactory.EvictQueries("Module");

            //模块基本信息。
            Module m = new Module();
            m.Id = IdGen.GetNextId(typeof(Module));
            m.Tag = dto.Tag;
            m.Name = dto.Name;
            m.Remark = dto.Remark;
            m.OrderId = dto.OrderId;
            m.ModuleUrl = dto.ModuleUrl;
            m.Disabled = dto.Disabled;

            //模块分类。
            ModuleType mt = Db.Session.Load(typeof(ModuleType), dto.ModuleTypeId) as ModuleType;
            mt.AddModule(m);

            //获取新增模块权限的主键值。
            string[] Ids = null;
            if (dto.ModuleRights.Count > 0)
                Ids = IdGen.GetNextId(typeof(ModuleRight), dto.ModuleRights.Count);

            //向数据库保存模块和模块权限。
            ITransaction transaction = Db.Session.BeginTransaction();
            try
            {
                Db.Session.Save(m);
                for (int i = 0; i < dto.ModuleRights.Count; i++)
                {
                    ModuleRight mr = new ModuleRight();
                    mr.Id = Ids[i];
                    mr.RightTag = dto.ModuleRights[i].ToString();
                    m.AddModuleRight(mr);
                    Db.Session.Save(mr);
                }
                transaction.Commit();
            }
            catch
            {
                transaction.Rollback();
                throw;
            }

            //返回新模块的Id。
            return m.Id;
        }
Example #2
0
        /// <summary>
        /// 更新模块。
        /// </summary>
        /// <param name="dto">待更新模块的信息。</param>
        /// <returns>成功标示。(1:成功;-2:Tag重复。)</returns>
        public static string UpdateModule(ModuleDTO dto)
        {
            Module existingM = GetModuleByTag(dto.Tag);
            if (existingM != null && existingM.Id != dto.Id) { return "-2"; }

            Db.SessionFactory.EvictQueries("Module");

            //模块基本信息。
            Module m = Db.Session.Load(typeof(Module), dto.Id) as Module;
            m.Tag = dto.Tag;
            m.Name = dto.Name;
            m.Remark = dto.Remark;
            m.OrderId = dto.OrderId;
            m.ModuleUrl = dto.ModuleUrl;
            m.Disabled = dto.Disabled;

            //待删除的权限。
            ArrayList ToBeRemoved = new ArrayList();
            IDictionaryEnumerator ide = m.ModuleRights.GetEnumerator();
            while (ide.MoveNext())
            {
                string key = ((DictionaryEntry)ide.Current).Key.ToString();
                bool isFind = false;
                for (int i = 0; i < dto.ModuleRights.Count; i++)
                {
                    if (key == dto.ModuleRights[i].ToString())
                    {
                        isFind = true;
                        break;
                    }
                }
                if (!isFind)
                {
                    ToBeRemoved.Add(key);
                }
            }

            //待增加的权限。
            ArrayList ToBeAdded = new ArrayList();
            for (int i = 0; i < dto.ModuleRights.Count; i++)
            {
                if (!m.ModuleRights.Contains(dto.ModuleRights[i].ToString()))
                    ToBeAdded.Add(dto.ModuleRights[i].ToString());
            }

            //获取新增模块权限的主键值。
            string[] Ids = null;
            if (ToBeAdded.Count > 0)
                Ids = IdGen.GetNextId(typeof(ModuleRight), ToBeAdded.Count);

            //向数据库保存新的模块信息和模块权限信息。
            ITransaction transaction = Db.Session.BeginTransaction();
            try
            {
                //删除权限。
                foreach (object key in ToBeRemoved)
                {
                    ModuleRight mr = m.ModuleRights[key] as ModuleRight;
                    mr.RemoveAllPermissions();
                    mr.BreakAwayFromModule();
                    Db.Session.Delete(mr);
                }

                //增加权限。
                for (int i = 0; i < ToBeAdded.Count; i++)
                {
                    ModuleRight newMr = new ModuleRight();
                    newMr.Id = Ids[i];
                    newMr.RightTag = ToBeAdded[i].ToString();
                    m.AddModuleRight(newMr);
                    Db.Session.Save(newMr);
                }

                Db.Session.Update(m);
                transaction.Commit();

                return "1";
            }
            catch
            {
                transaction.Rollback();
                throw;
            }
        }