Beispiel #1
0
        /// <summary>
        /// 为某个组织创建某个角色
        /// </summary>
        /// <param name="json"></param>
        /// <param name="orgId"></param>
        /// <returns></returns>
        public async Task CreateByOrgId(RoleJson json, string orgId)
        {
            // 1. 创建角色
            string roleId = Guid.NewGuid().ToString();

            json.Id = roleId;
            await Store.Create(Mapper.Map <Role>(json));

            // 2. 创建角色组织关联
            await RoleOrgStore.Create(new RoleOrg
            {
                Id     = Guid.NewGuid().ToString(),
                RoleId = roleId,
                OrgId  = orgId
            });
        }
Beispiel #2
0
        /// <summary>
        /// 查询用户ID所在组织的所有角色(包含子组织的角色)
        /// (((UID-[UR]->RID)|PID)-[ROP]->OID-[RO]->RID)
        /// </summary>
        /// <param name="userId">用户ID</param>
        /// <returns></returns>
        public async Task <IEnumerable <RoleJson> > FindRoleOfOrgByUserId(string userId)
        {
            // 1. 查询用户具有角色查询权限的组织森林,并扩展成组织列表
            // 1.1 查询用户权限的组织ID集合
            var orgIds = (await RoleOrgPerStore.FindOrgByUserIdPerName(userId, Constants.ROLE_QUERY)).Select(org => org.Id).ToList();
            // 2. 查询这些所有组织所包含的角色
            // 2.1 查询角色ID集合
            var roleIds = await(from ro in RoleOrgStore.Find()
                                where orgIds.Contains(ro.OrgId)
                                select ro.RoleId).ToListAsync();
            // 2.2 查询角色
            var roles = await(from role in Store.Context.Roles
                              where roleIds.Contains(role.Id)
                              select role).AsNoTracking().Select(role => Mapper.Map <RoleJson>(role)).ToListAsync();

            return(roles);
        }
Beispiel #3
0
        /// <summary>
        /// 新增角色 -通过组织用户ID(UID-[UO]->OID|RID-->RO)
        /// 将角色添加到用户所在组织上
        /// </summary>
        /// <param name="json">新增角色</param>
        /// <param name="userId">用户ID</param>
        /// <returns></returns>
        public async Task CreateForOrgByUserId(RoleJson json, string userId)
        {
            // 1. 创建角色
            string roleId = Guid.NewGuid().ToString();

            json.Id = roleId;
            await Store.Create(Mapper.Map <Role>(json));

            // 2. 通过用户ID查询组织ID -用户不能有多个组织
            var orgId = (from uo in Store.Context.UserOrgs
                         where uo.UserId == userId
                         select uo.OrgId).Single();
            // TODO:角色名称不能重复
            // 3. 创建角色组织关联
            await RoleOrgStore.Create(new RoleOrg
            {
                Id     = Guid.NewGuid().ToString(),
                RoleId = roleId,
                OrgId  = orgId
            });
        }