public int Save()
 {
     return(_ctx.SaveChanges());
 }
Exemple #2
0
        public void SetPermissions(AuthorizationObjectType objType, int id, string[] permissionCodes)
        {
            IEnumerable <Permission> originalPermissions = null;

            switch (objType)
            {
            case AuthorizationObjectType.User:
                var user = _ctx.User.SingleOrDefault(u => u.Id == id && !u.IsDeleted && u.IsAdmin);
                if (user != null)
                {
                    user.LastModificationTime = DateTime.Now;
                    originalPermissions       = _ctx.Permission.Where(p => p.UserId == id);
                }
                else
                {
                    ThrowException("用户不存在");
                }
                break;

            case AuthorizationObjectType.Role:
                var role = _ctx.Role.SingleOrDefault(r => r.Id == id && !r.IsDeleted);
                if (role != null)
                {
                    role.LastModificationTime = DateTime.Now;
                    originalPermissions       = _ctx.Permission.Where(p => p.RoleId == id);
                }
                else
                {
                    ThrowException("角色不存在");
                }
                break;
            }

            if (originalPermissions != null)
            {
                if (originalPermissions.Any())
                {
                    _ctx.Permission.RemoveRange(originalPermissions);
                }

                var permissions = permissionCodes?.Select(code => new Permission
                {
                    Code         = code,
                    CreationTime = DateTime.Now
                })
                                  .ToList();

                if (permissions != null && permissions.Any())
                {
                    switch (objType)
                    {
                    case AuthorizationObjectType.User:
                        permissions.ForEach(p => p.UserId = id);
                        break;

                    case AuthorizationObjectType.Role:
                        permissions.ForEach(p => p.RoleId = id);
                        break;
                    }
                    _ctx.Permission.AddRange(permissions);
                }
                _ctx.SaveChanges();
            }
        }