/// <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 }); }
/// <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); }
/// <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 }); }